vmware-vra 2.6.1 → 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.
- checksums.yaml +5 -5
- data/.gitignore +3 -1
- data/CHANGELOG.md +35 -2
- data/README.md +91 -141
- data/Rakefile +1 -12
- data/lib/vra/catalog.rb +39 -8
- data/lib/vra/catalog_base.rb +62 -0
- data/lib/vra/catalog_item.rb +29 -75
- data/lib/vra/catalog_source.rb +116 -0
- data/lib/vra/catalog_type.rb +56 -0
- data/lib/vra/client.rb +62 -53
- data/lib/vra/deployment.rb +155 -0
- data/lib/vra/deployment_request.rb +117 -0
- data/lib/vra/{resources.rb → deployments.rb} +26 -17
- data/lib/vra/exceptions.rb +2 -2
- data/lib/vra/http.rb +20 -7
- data/lib/vra/request.rb +28 -36
- data/lib/vra/request_parameters.rb +14 -13
- data/lib/vra/resource.rb +33 -203
- data/lib/vra/version.rb +2 -2
- data/lib/vra.rb +15 -12
- data/spec/catalog_item_spec.rb +64 -222
- data/spec/catalog_source_spec.rb +178 -0
- data/spec/catalog_spec.rb +112 -72
- data/spec/catalog_type_spec.rb +114 -0
- data/spec/client_spec.rb +272 -227
- data/spec/deployment_request_spec.rb +192 -0
- data/spec/deployment_spec.rb +227 -0
- data/spec/deployments_spec.rb +80 -0
- data/spec/fixtures/resource/sample_catalog_item.json +18 -0
- data/spec/fixtures/resource/sample_catalog_item_2.json +18 -0
- data/spec/fixtures/resource/sample_catalog_source.json +20 -0
- data/spec/fixtures/resource/sample_catalog_type.json +49 -0
- data/spec/fixtures/resource/sample_dep_actions.json +58 -0
- data/spec/fixtures/resource/sample_dep_request.json +19 -0
- data/spec/fixtures/resource/sample_dep_resource.json +112 -0
- data/spec/fixtures/resource/sample_deployment.json +26 -0
- data/spec/fixtures/resource/sample_entitlements.json +25 -0
- data/spec/http_spec.rb +63 -61
- data/spec/request_spec.rb +62 -68
- data/spec/resource_spec.rb +71 -390
- data/spec/spec_helper.rb +10 -4
- data/vmware-vra.gemspec +3 -5
- metadata +44 -36
- data/.travis.yml +0 -14
- data/Jenkinsfile +0 -31
- data/lib/vra/catalog_request.rb +0 -126
- data/lib/vra/requests.rb +0 -41
- data/spec/catalog_request_spec.rb +0 -267
- data/spec/requests_spec.rb +0 -60
- data/spec/resources_spec.rb +0 -71
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmware-vra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Leff
|
8
8
|
- JJ Asghar
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-01-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi-yajl
|
@@ -43,14 +43,14 @@ dependencies:
|
|
43
43
|
name: bundler
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '1.7'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - "
|
53
|
+
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '1.7'
|
56
56
|
- !ruby/object:Gem::Dependency
|
@@ -67,20 +67,6 @@ dependencies:
|
|
67
67
|
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: github_changelog_generator
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
-
requirements:
|
74
|
-
- - ">="
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '0'
|
77
|
-
type: :development
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
80
|
-
requirements:
|
81
|
-
- - ">="
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: '0'
|
84
70
|
- !ruby/object:Gem::Dependency
|
85
71
|
name: pry
|
86
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,14 +115,14 @@ dependencies:
|
|
129
115
|
requirements:
|
130
116
|
- - "~>"
|
131
117
|
- !ruby/object:Gem::Version
|
132
|
-
version: '
|
118
|
+
version: '3.5'
|
133
119
|
type: :development
|
134
120
|
prerelease: false
|
135
121
|
version_requirements: !ruby/object:Gem::Requirement
|
136
122
|
requirements:
|
137
123
|
- - "~>"
|
138
124
|
- !ruby/object:Gem::Version
|
139
|
-
version: '
|
125
|
+
version: '3.5'
|
140
126
|
description: Client gem for interacting with VMware vRealize Automation.
|
141
127
|
email:
|
142
128
|
- jj@chef.io
|
@@ -148,30 +134,35 @@ files:
|
|
148
134
|
- ".github/PULL_REQUEST_TEMPLATE.md"
|
149
135
|
- ".gitignore"
|
150
136
|
- ".rubocop.yml"
|
151
|
-
- ".travis.yml"
|
152
137
|
- CHANGELOG.md
|
153
138
|
- Gemfile
|
154
|
-
- Jenkinsfile
|
155
139
|
- LICENSE.txt
|
156
140
|
- README.md
|
157
141
|
- Rakefile
|
158
142
|
- lib/vra.rb
|
159
143
|
- lib/vra/catalog.rb
|
144
|
+
- lib/vra/catalog_base.rb
|
160
145
|
- lib/vra/catalog_item.rb
|
161
|
-
- lib/vra/
|
146
|
+
- lib/vra/catalog_source.rb
|
147
|
+
- lib/vra/catalog_type.rb
|
162
148
|
- lib/vra/client.rb
|
149
|
+
- lib/vra/deployment.rb
|
150
|
+
- lib/vra/deployment_request.rb
|
151
|
+
- lib/vra/deployments.rb
|
163
152
|
- lib/vra/exceptions.rb
|
164
153
|
- lib/vra/http.rb
|
165
154
|
- lib/vra/request.rb
|
166
155
|
- lib/vra/request_parameters.rb
|
167
|
-
- lib/vra/requests.rb
|
168
156
|
- lib/vra/resource.rb
|
169
|
-
- lib/vra/resources.rb
|
170
157
|
- lib/vra/version.rb
|
171
158
|
- spec/catalog_item_spec.rb
|
172
|
-
- spec/
|
159
|
+
- spec/catalog_source_spec.rb
|
173
160
|
- spec/catalog_spec.rb
|
161
|
+
- spec/catalog_type_spec.rb
|
174
162
|
- spec/client_spec.rb
|
163
|
+
- spec/deployment_request_spec.rb
|
164
|
+
- spec/deployment_spec.rb
|
165
|
+
- spec/deployments_spec.rb
|
175
166
|
- spec/fixtures/catalog_request_template.json
|
176
167
|
- spec/fixtures/resource/catalog_request.json
|
177
168
|
- spec/fixtures/resource/ip_address.txt
|
@@ -179,21 +170,28 @@ files:
|
|
179
170
|
- spec/fixtures/resource/no_ip_address.txt
|
180
171
|
- spec/fixtures/resource/non_vm_resource.json
|
181
172
|
- spec/fixtures/resource/resource_response.json
|
173
|
+
- spec/fixtures/resource/sample_catalog_item.json
|
174
|
+
- spec/fixtures/resource/sample_catalog_item_2.json
|
175
|
+
- spec/fixtures/resource/sample_catalog_source.json
|
176
|
+
- spec/fixtures/resource/sample_catalog_type.json
|
177
|
+
- spec/fixtures/resource/sample_dep_actions.json
|
178
|
+
- spec/fixtures/resource/sample_dep_request.json
|
179
|
+
- spec/fixtures/resource/sample_dep_resource.json
|
180
|
+
- spec/fixtures/resource/sample_deployment.json
|
181
|
+
- spec/fixtures/resource/sample_entitlements.json
|
182
182
|
- spec/fixtures/resource/vm_properties.json
|
183
183
|
- spec/fixtures/resource/vm_resource.json
|
184
184
|
- spec/fixtures/resource/vm_resource_no_operations.json
|
185
185
|
- spec/http_spec.rb
|
186
186
|
- spec/request_spec.rb
|
187
|
-
- spec/requests_spec.rb
|
188
187
|
- spec/resource_spec.rb
|
189
|
-
- spec/resources_spec.rb
|
190
188
|
- spec/spec_helper.rb
|
191
189
|
- vmware-vra.gemspec
|
192
190
|
homepage: https://github.com/chef-partners/vmware-vra-gem
|
193
191
|
licenses:
|
194
192
|
- Apache 2.0
|
195
193
|
metadata: {}
|
196
|
-
post_install_message:
|
194
|
+
post_install_message:
|
197
195
|
rdoc_options: []
|
198
196
|
require_paths:
|
199
197
|
- lib
|
@@ -208,16 +206,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
206
|
- !ruby/object:Gem::Version
|
209
207
|
version: '0'
|
210
208
|
requirements: []
|
211
|
-
|
212
|
-
|
213
|
-
signing_key:
|
209
|
+
rubygems_version: 3.2.32
|
210
|
+
signing_key:
|
214
211
|
specification_version: 4
|
215
212
|
summary: Client gem for interacting with VMware vRealize Automation.
|
216
213
|
test_files:
|
217
214
|
- spec/catalog_item_spec.rb
|
218
|
-
- spec/
|
215
|
+
- spec/catalog_source_spec.rb
|
219
216
|
- spec/catalog_spec.rb
|
217
|
+
- spec/catalog_type_spec.rb
|
220
218
|
- spec/client_spec.rb
|
219
|
+
- spec/deployment_request_spec.rb
|
220
|
+
- spec/deployment_spec.rb
|
221
|
+
- spec/deployments_spec.rb
|
221
222
|
- spec/fixtures/catalog_request_template.json
|
222
223
|
- spec/fixtures/resource/catalog_request.json
|
223
224
|
- spec/fixtures/resource/ip_address.txt
|
@@ -225,12 +226,19 @@ test_files:
|
|
225
226
|
- spec/fixtures/resource/no_ip_address.txt
|
226
227
|
- spec/fixtures/resource/non_vm_resource.json
|
227
228
|
- spec/fixtures/resource/resource_response.json
|
229
|
+
- spec/fixtures/resource/sample_catalog_item.json
|
230
|
+
- spec/fixtures/resource/sample_catalog_item_2.json
|
231
|
+
- spec/fixtures/resource/sample_catalog_source.json
|
232
|
+
- spec/fixtures/resource/sample_catalog_type.json
|
233
|
+
- spec/fixtures/resource/sample_dep_actions.json
|
234
|
+
- spec/fixtures/resource/sample_dep_request.json
|
235
|
+
- spec/fixtures/resource/sample_dep_resource.json
|
236
|
+
- spec/fixtures/resource/sample_deployment.json
|
237
|
+
- spec/fixtures/resource/sample_entitlements.json
|
228
238
|
- spec/fixtures/resource/vm_properties.json
|
229
239
|
- spec/fixtures/resource/vm_resource.json
|
230
240
|
- spec/fixtures/resource/vm_resource_no_operations.json
|
231
241
|
- spec/http_spec.rb
|
232
242
|
- spec/request_spec.rb
|
233
|
-
- spec/requests_spec.rb
|
234
243
|
- spec/resource_spec.rb
|
235
|
-
- spec/resources_spec.rb
|
236
244
|
- spec/spec_helper.rb
|
data/.travis.yml
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
cache: bundler
|
3
|
-
sudo: false
|
4
|
-
rvm:
|
5
|
-
- 2.3.1
|
6
|
-
branches:
|
7
|
-
only:
|
8
|
-
- master
|
9
|
-
notifications:
|
10
|
-
slack:
|
11
|
-
on_success: change
|
12
|
-
on_failure: always
|
13
|
-
rooms:
|
14
|
-
secure: SPX5JlKrlL3dpWUIRd/xxjId06D9OT7ig6qNlTH8bSoszw2t0QQ4X/m4iNmQ7ksMoqkvknc6y8HRVD7oJUgVYelBjZR+ayAdI+tlRvtU+CQdij+Xeamix3TwHgTWPzFmMoQl6zNkoLWRaXZ1DCRZi3/BPhXF0A9wGel4ToD6nBUe5chvvhWUltVFTxL0YmA537LWLqF+JyFWbr45Eo4EJXqo0i3Mz/1w1Ct7cDZjzIDsmPhchVYOdW1VA+rVC0oWiwGkx7KuX/QTs/D2XuL6xSRy/ftulgF+j/W8P3hgdjZaBlfm7UmEr/Df7nml8SXuo44hUB964EfLgTjg/EN8qYaZ9GhQ6xVuRuDGpoTc22kCUJqDWUFzlAbs/Og4qNP0FdZkofZPkvMG+C3JLwIKTDBNaG+DO+/19UZpcofPouQ5UOolFCkZcCwdMBHg2AecWFd4yMJ68giKd/zPdN/+ALxxK1RrOyk8JecvpolN/lhjnmR+zktJXaUikCzK3Zr2f2hXMVXULiGkMw5IRwiMor7nCIEBW5FqNP6mhV8JIDQguyLXy2wfCUBauhDR2VkV4pEFCCdRu+uPW8C80R1B3JmZn7q2KcX0WfsSoAntZh5ZedAXW+YoUKSnZR/X6RpxvRi/VSaX529BkyU07S52mS2xNW1HWgY2/laShHtMaAM=
|
data/Jenkinsfile
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
pipeline {
|
2
|
-
agent {
|
3
|
-
docker {
|
4
|
-
args '-u root'
|
5
|
-
image 'localhost:5000/jjkeysv3'
|
6
|
-
}
|
7
|
-
|
8
|
-
}
|
9
|
-
triggers {
|
10
|
-
pollSCM('H * * * *')
|
11
|
-
}
|
12
|
-
stages {
|
13
|
-
stage('Pull down the ChefDK') {
|
14
|
-
steps {
|
15
|
-
sh '''apt-get update
|
16
|
-
apt-get install -y curl sudo git build-essential
|
17
|
-
curl -L https://chef.io/chef/install.sh | sudo bash -s -- -P chefdk -c current'''
|
18
|
-
}
|
19
|
-
}
|
20
|
-
stage('Bundle') {
|
21
|
-
steps {
|
22
|
-
sh 'chef exec bundle install'
|
23
|
-
}
|
24
|
-
}
|
25
|
-
stage('Rake') {
|
26
|
-
steps {
|
27
|
-
sh 'chef exec bundle exec rake '
|
28
|
-
}
|
29
|
-
}
|
30
|
-
}
|
31
|
-
}
|
data/lib/vra/catalog_request.rb
DELETED
@@ -1,126 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
#
|
3
|
-
# Author:: Chef Partner Engineering (<partnereng@chef.io>)
|
4
|
-
# Copyright:: Copyright (c) 2015 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 "vra/catalog_item"
|
20
|
-
|
21
|
-
module Vra
|
22
|
-
class CatalogRequest
|
23
|
-
attr_reader :catalog_id, :catalog_item, :client, :custom_fields
|
24
|
-
attr_writer :subtenant_id
|
25
|
-
attr_accessor :cpus, :memory, :requested_for, :lease_days, :notes, :template_payload
|
26
|
-
|
27
|
-
def initialize(client, catalog_id, opts = {})
|
28
|
-
@client = client
|
29
|
-
@catalog_id = catalog_id
|
30
|
-
@cpus = opts[:cpus]
|
31
|
-
@memory = opts[:memory]
|
32
|
-
@requested_for = opts[:requested_for]
|
33
|
-
@lease_days = opts[:lease_days]
|
34
|
-
@notes = opts[:notes]
|
35
|
-
@subtenant_id = opts[:subtenant_id]
|
36
|
-
@additional_params = opts[:additional_params] || Vra::RequestParameters.new
|
37
|
-
@catalog_item = Vra::CatalogItem.new(client, id: catalog_id)
|
38
|
-
end
|
39
|
-
|
40
|
-
# @param payload_file [String] - A json payload that represents the catalog template you want to merge with this request
|
41
|
-
# @param client [Vra::Client] - a vra client object
|
42
|
-
# @return [Vra::CatalogRequest] - a request with the given payload merged
|
43
|
-
def self.request_from_payload(client, payload_file)
|
44
|
-
hash_payload = JSON.parse(File.read(payload_file))
|
45
|
-
catalog_id = hash_payload["catalogItemId"]
|
46
|
-
blueprint_name = hash_payload["data"].select { |_k, v| v.is_a?(Hash) }.keys.first
|
47
|
-
blueprint_data = hash_payload["data"][blueprint_name]
|
48
|
-
opts = {}
|
49
|
-
opts[:cpus] = blueprint_data["data"]["cpu"]
|
50
|
-
opts[:memory] = blueprint_data["data"]["memory"]
|
51
|
-
opts[:requested_for] = hash_payload["requestedFor"]
|
52
|
-
opts[:lease_days] = blueprint_data.fetch("leaseDays", nil) || hash_payload["data"].fetch("_lease_days", 1)
|
53
|
-
opts[:description] = hash_payload["description"]
|
54
|
-
opts[:subtenant_id] = hash_payload["businessGroupId"]
|
55
|
-
cr = Vra::CatalogRequest.new(client, catalog_id, opts)
|
56
|
-
cr.template_payload = File.read(payload_file)
|
57
|
-
cr
|
58
|
-
end
|
59
|
-
|
60
|
-
def set_parameter(key, type, value)
|
61
|
-
@additional_params.set(key, type, value)
|
62
|
-
end
|
63
|
-
|
64
|
-
def set_parameters(key, value_data)
|
65
|
-
@additional_params.set_parameters(key, value_data)
|
66
|
-
end
|
67
|
-
|
68
|
-
def delete_parameter(key)
|
69
|
-
@additional_params.delete(key)
|
70
|
-
end
|
71
|
-
|
72
|
-
def parameters
|
73
|
-
@additional_params.to_vra
|
74
|
-
end
|
75
|
-
|
76
|
-
def subtenant_id
|
77
|
-
@subtenant_id || catalog_item.subtenant_id
|
78
|
-
end
|
79
|
-
|
80
|
-
def validate_params!
|
81
|
-
missing_params = []
|
82
|
-
[ :catalog_id, :cpus, :memory, :requested_for, :subtenant_id ].each do |param|
|
83
|
-
missing_params << param.to_s if send(param).nil?
|
84
|
-
end
|
85
|
-
|
86
|
-
raise ArgumentError, "Unable to submit request, required param(s) missing => #{missing_params.join(', ')}" unless missing_params.empty?
|
87
|
-
end
|
88
|
-
|
89
|
-
# @return [String] - the current catalog template payload merged with the settings applied from this request
|
90
|
-
# @param [String] - A json payload that represents the catalog template you want to merge with this request
|
91
|
-
def merge_payload(payload)
|
92
|
-
hash_payload = JSON.parse(payload)
|
93
|
-
blueprint_name = hash_payload["data"].select { |_k, v| v.is_a?(Hash) }.keys.first
|
94
|
-
hash_payload["data"][blueprint_name]["data"]["cpu"] = @cpus
|
95
|
-
hash_payload["data"][blueprint_name]["data"]["memory"] = @memory
|
96
|
-
hash_payload["requestedFor"] = @requested_for
|
97
|
-
hash_payload["data"]["_leaseDays"] = @lease_days
|
98
|
-
hash_payload["description"] = @notes
|
99
|
-
end
|
100
|
-
|
101
|
-
# @return [String] - the current catalog template payload merged with the settings applied from this request
|
102
|
-
def merged_payload
|
103
|
-
merge_payload(template_payload)
|
104
|
-
end
|
105
|
-
|
106
|
-
# @return [String] - the current catalog template payload from VRA or custom payload set in JSON format
|
107
|
-
def template_payload
|
108
|
-
@template_payload ||= Vra::CatalogItem.dump_template(client, @catalog_id)
|
109
|
-
end
|
110
|
-
|
111
|
-
# @return [Vra::Request] - submits and returns the request, validating before hand
|
112
|
-
def submit
|
113
|
-
validate_params!
|
114
|
-
|
115
|
-
begin
|
116
|
-
post_response = client.http_post("/catalog-service/api/consumer/entitledCatalogItems/#{@catalog_id}/requests", template_payload)
|
117
|
-
rescue Vra::Exception::HTTPError => e
|
118
|
-
raise Vra::Exception::RequestError, "Unable to submit request: #{e.errors.join(', ')}"
|
119
|
-
rescue
|
120
|
-
raise
|
121
|
-
end
|
122
|
-
request_id = JSON.parse(post_response.body)["id"]
|
123
|
-
Vra::Request.new(client, request_id)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
data/lib/vra/requests.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
#
|
3
|
-
# Author:: Chef Partner Engineering (<partnereng@chef.io>)
|
4
|
-
# Copyright:: Copyright (c) 2015 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
|
-
module Vra
|
21
|
-
class Requests
|
22
|
-
def initialize(client)
|
23
|
-
@client = client
|
24
|
-
end
|
25
|
-
|
26
|
-
def all_requests
|
27
|
-
requests = []
|
28
|
-
|
29
|
-
items = @client.http_get_paginated_array!("/catalog-service/api/consumer/requests")
|
30
|
-
items.each do |item|
|
31
|
-
requests << Vra::Request.new(@client, item["id"])
|
32
|
-
end
|
33
|
-
|
34
|
-
requests
|
35
|
-
end
|
36
|
-
|
37
|
-
def by_id(id)
|
38
|
-
Vra::Request.new(@client, id)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,267 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
#
|
3
|
-
# Author:: Chef Partner Engineering (<partnereng@chef.io>)
|
4
|
-
# Copyright:: Copyright (c) 2015 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::CatalogRequest do
|
23
|
-
before(:each) do
|
24
|
-
catalog_item = double("catalog_item")
|
25
|
-
allow(catalog_item).to receive(:blueprint_id).and_return("catalog_blueprint")
|
26
|
-
allow(catalog_item).to receive(:tenant_id).and_return("catalog_tenant")
|
27
|
-
allow(catalog_item).to receive(:subtenant_id).and_return("catalog_subtenant")
|
28
|
-
allow(Vra::CatalogItem).to receive(:new).and_return(catalog_item)
|
29
|
-
end
|
30
|
-
|
31
|
-
let(:client) do
|
32
|
-
Vra::Client.new(username: "user@corp.local",
|
33
|
-
password: "password",
|
34
|
-
tenant: "tenant",
|
35
|
-
base_url: "https://vra.corp.local")
|
36
|
-
end
|
37
|
-
|
38
|
-
let(:catalog_item_payload) do
|
39
|
-
{
|
40
|
-
"@type" => "CatalogItem",
|
41
|
-
"id" => "9e98042e-5443-4082-afd5-ab5a32939bbc",
|
42
|
-
"version" => 2,
|
43
|
-
"name" => "CentOS 6.6",
|
44
|
-
"description" => "Blueprint for deploying a CentOS Linux development server",
|
45
|
-
"status" => "PUBLISHED",
|
46
|
-
"statusName" => "Published",
|
47
|
-
"organization" => {
|
48
|
-
"tenantRef" => "vsphere.local",
|
49
|
-
"tenantLabel" => "vsphere.local",
|
50
|
-
"subtenantRef" => "962ab3f9-858c-4483-a49f-fa97392c314b",
|
51
|
-
"subtenantLabel" => "catalog_subtenant",
|
52
|
-
},
|
53
|
-
"providerBinding" => {
|
54
|
-
"bindingId" => "33af5413-4f20-4b3b-8268-32edad434dfb",
|
55
|
-
"providerRef" => {
|
56
|
-
"id" => "c3b2bc30-47b0-454f-b57d-df02a7356fe6",
|
57
|
-
"label" => "iaas-service",
|
58
|
-
},
|
59
|
-
},
|
60
|
-
"requestedFor" => "me@me.com",
|
61
|
-
"data" => {
|
62
|
-
"_leaseDays" => "2",
|
63
|
-
"my_blueprint" => {
|
64
|
-
"componentTypeId" => "com.vmware.csp.component.cafe.composition",
|
65
|
-
"componentId" => nil,
|
66
|
-
"classId" => "Blueprint.Component.Declaration",
|
67
|
-
"typeFilter" => "",
|
68
|
-
"data" => {
|
69
|
-
"cpu" => "2",
|
70
|
-
"memory" => "4096",
|
71
|
-
|
72
|
-
},
|
73
|
-
},
|
74
|
-
},
|
75
|
-
}
|
76
|
-
end
|
77
|
-
|
78
|
-
let(:request_template_response) do
|
79
|
-
double("response", code: 200, body: catalog_item_payload.to_json)
|
80
|
-
end
|
81
|
-
|
82
|
-
context "when no subtenant ID is provided" do
|
83
|
-
let(:request) do
|
84
|
-
client.catalog.request("catalog-12345",
|
85
|
-
cpus: 2,
|
86
|
-
memory: 1024,
|
87
|
-
lease_days: 15,
|
88
|
-
requested_for: "tester@corp.local",
|
89
|
-
notes: "test notes")
|
90
|
-
end
|
91
|
-
|
92
|
-
it "uses the subtenant ID from the catalog item" do
|
93
|
-
expect(request.subtenant_id).to eq "catalog_subtenant"
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
context "when subtenant is provided, and all shared tests" do
|
98
|
-
let(:request) do
|
99
|
-
client.catalog.request("catalog-12345",
|
100
|
-
cpus: 2,
|
101
|
-
memory: 1024,
|
102
|
-
lease_days: 15,
|
103
|
-
requested_for: "tester@corp.local",
|
104
|
-
notes: "test notes",
|
105
|
-
subtenant_id: "user_subtenant")
|
106
|
-
end
|
107
|
-
|
108
|
-
describe "#initialize" do
|
109
|
-
it "sets the appropriate instance vars" do
|
110
|
-
expect(request.catalog_id).to eq "catalog-12345"
|
111
|
-
expect(request.cpus).to eq 2
|
112
|
-
expect(request.memory).to eq 1024
|
113
|
-
expect(request.lease_days).to eq 15
|
114
|
-
expect(request.requested_for).to eq "tester@corp.local"
|
115
|
-
expect(request.notes).to eq "test notes"
|
116
|
-
expect(request.subtenant_id).to eq "user_subtenant"
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
describe "#validate_params!" do
|
121
|
-
context "when all required params are provided" do
|
122
|
-
it "does not raise an exception" do
|
123
|
-
expect { request.validate_params! }.to_not raise_error
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
context "when a required parameter is not provided" do
|
128
|
-
it "raises an exception" do
|
129
|
-
request.cpus = nil
|
130
|
-
expect { request.validate_params! }.to raise_error(ArgumentError)
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
describe "#merge_payload" do
|
136
|
-
it "properly handles additional parameters" do
|
137
|
-
request.set_parameter("param1", "string", "my string")
|
138
|
-
request.set_parameter("param2", "integer", "2468")
|
139
|
-
|
140
|
-
template = File.read("spec/fixtures/resource/catalog_request.json")
|
141
|
-
payload = JSON.parse(request.merge_payload(template))
|
142
|
-
param1 = payload["data"]["param1"]
|
143
|
-
param2 = payload["data"]["param2"]
|
144
|
-
|
145
|
-
expect(param1).to be_a(String)
|
146
|
-
expect(param2).to be_a(Integer)
|
147
|
-
expect(param1).to eq "my string"
|
148
|
-
expect(param2).to eq 2468
|
149
|
-
end
|
150
|
-
|
151
|
-
it "properly handles additional nested parameters" do
|
152
|
-
request.set_parameter("BP1~param1", "string", "my string")
|
153
|
-
request.set_parameter("BP1~BP2~param2", "integer", 2468)
|
154
|
-
|
155
|
-
template = File.read("spec/fixtures/resource/catalog_request.json")
|
156
|
-
payload = JSON.parse(request.merge_payload(template))
|
157
|
-
param1 = payload["data"]["BP1"]["data"]["param1"]
|
158
|
-
param2 = payload["data"]["BP1"]["data"]["BP2"]["data"]["param2"]
|
159
|
-
|
160
|
-
expect(param1).to be_a(String)
|
161
|
-
expect(param2).to be_a(Integer)
|
162
|
-
expect(param1).to eq "my string"
|
163
|
-
expect(param2).to eq 2468
|
164
|
-
end
|
165
|
-
|
166
|
-
it "properly handles nested parameters" do
|
167
|
-
parameters = {
|
168
|
-
"BP1" => {
|
169
|
-
"param1" => {
|
170
|
-
type: "string",
|
171
|
-
value: "my string",
|
172
|
-
},
|
173
|
-
"BP2" => {
|
174
|
-
"param2" => {
|
175
|
-
type: "integer",
|
176
|
-
value: 2468,
|
177
|
-
},
|
178
|
-
},
|
179
|
-
},
|
180
|
-
}
|
181
|
-
|
182
|
-
parameters.each do |k, v|
|
183
|
-
request.set_parameters(k, v)
|
184
|
-
end
|
185
|
-
|
186
|
-
template = File.read("spec/fixtures/resource/catalog_request.json")
|
187
|
-
payload = JSON.parse(request.merge_payload(template))
|
188
|
-
param1 = payload["data"]["BP1"]["data"]["param1"]
|
189
|
-
param2 = payload["data"]["BP1"]["data"]["BP2"]["data"]["param2"]
|
190
|
-
|
191
|
-
expect(param1).to be_a(String)
|
192
|
-
expect(param2).to be_a(Integer)
|
193
|
-
expect(param1).to eq "my string"
|
194
|
-
expect(param2).to eq 2468
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
describe "#submit" do
|
199
|
-
let(:response) do
|
200
|
-
double("response", code: 200, body: { id: "12345678910" }.to_json)
|
201
|
-
end
|
202
|
-
|
203
|
-
before do
|
204
|
-
allow(request).to receive(:request_payload).and_return({})
|
205
|
-
allow(client).to receive(:authorize!).and_return(true)
|
206
|
-
allow(client).to receive(:http_post).with("/catalog-service/api/consumer/requests", "{}").and_return(response)
|
207
|
-
allow(client).to receive(:http_get).with("/catalog-service/api/consumer/entitledCatalogItems/catalog-12345/requests/template")
|
208
|
-
.and_return(request_template_response)
|
209
|
-
end
|
210
|
-
|
211
|
-
it "calls http_get template" do
|
212
|
-
expect(client).to receive(:http_get).with("/catalog-service/api/consumer/entitledCatalogItems/catalog-12345/requests/template")
|
213
|
-
.and_return(request_template_response)
|
214
|
-
allow(client).to receive(:http_post).with("/catalog-service/api/consumer/entitledCatalogItems/catalog-12345/requests", request.merged_payload).and_return(response)
|
215
|
-
request.submit
|
216
|
-
end
|
217
|
-
|
218
|
-
it "calls http_post" do
|
219
|
-
expect(client).to receive(:http_post).with("/catalog-service/api/consumer/entitledCatalogItems/catalog-12345/requests", request.merged_payload).and_return(response)
|
220
|
-
request.submit
|
221
|
-
end
|
222
|
-
|
223
|
-
it "returns Vra::Request" do
|
224
|
-
allow(client).to receive(:http_post).with("/catalog-service/api/consumer/entitledCatalogItems/catalog-12345/requests", request.merged_payload).and_return(response)
|
225
|
-
expect(request.submit).to be_a(Vra::Request)
|
226
|
-
end
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
|
-
describe "merges payload" do
|
231
|
-
let(:request) do
|
232
|
-
client.catalog.request("catalog-12345",
|
233
|
-
cpus: 2,
|
234
|
-
memory: 1024,
|
235
|
-
lease_days: 15,
|
236
|
-
requested_for: "tester@corp.local",
|
237
|
-
notes: "test notes")
|
238
|
-
end
|
239
|
-
before(:each) do
|
240
|
-
allow(Vra::CatalogItem).to receive(:dump_template).and_return({ data2: { key2: "value2" } }.merge(catalog_item_payload).to_json)
|
241
|
-
end
|
242
|
-
|
243
|
-
it "without catalog template" do
|
244
|
-
request.template_payload = { data2: { key1: "value1" } }.merge(catalog_item_payload).to_json
|
245
|
-
template = JSON.parse(request.merged_payload)
|
246
|
-
expect(template["data2"].keys).to_not include("key2")
|
247
|
-
end
|
248
|
-
|
249
|
-
it "with catalog template" do
|
250
|
-
request.template_payload = nil
|
251
|
-
template = JSON.parse(request.merged_payload)
|
252
|
-
expect(template["data2"].keys).to include("key2")
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
it "creates request" do
|
257
|
-
payload_file = File.join(fixtures_dir, "catalog_request_template.json")
|
258
|
-
expect(Vra::CatalogRequest.request_from_payload(client, payload_file)).to be_a(Vra::CatalogRequest)
|
259
|
-
end
|
260
|
-
|
261
|
-
it "creates request with correct payload" do
|
262
|
-
payload_file = File.join(fixtures_dir, "catalog_request_template.json")
|
263
|
-
cr = Vra::CatalogRequest.request_from_payload(client, payload_file)
|
264
|
-
data = JSON.parse(cr.merged_payload)
|
265
|
-
expect(data["data"]["superduper_key"]).to eq("superduper_value")
|
266
|
-
end
|
267
|
-
end
|