vmware-vra 2.2.0 → 2.3.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 +15 -2
- data/Jenkinsfile +31 -0
- data/README.md +6 -0
- data/lib/vra/catalog_request.rb +23 -10
- data/lib/vra/request_parameters.rb +103 -12
- data/lib/vra/version.rb +1 -1
- data/spec/catalog_request_spec.rb +50 -4
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4206fd0351845613715dd83cc91a70b57067a025
|
4
|
+
data.tar.gz: 1ff2b3429cda1eb4f46cad5f9832cded71d60fde
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f8e728e3be572a2d9094115702cc1ba4293ee92cebd5d43fb6430cfa80c48d378abde08d98013cf986c703ef126a05add06d955def8b407c30f017424de9dc4
|
7
|
+
data.tar.gz: ec94a0eec7d637ce06affef14c82aed642a520d5d8548a3e5288e501b87b6a78f93d5b671b601d6ccf3ef502949fc1b6633f46d2e16e5f3507166154d02813a4
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,20 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
## [2.
|
4
|
-
[Full Changelog](https://github.com/chef-partners/vmware-vra-gem/compare/v2.
|
3
|
+
## [2.3.0](https://github.com/chef-partners/vmware-vra-gem/tree/2.3.0) (2017-06-30)
|
4
|
+
[Full Changelog](https://github.com/chef-partners/vmware-vra-gem/compare/v2.2.0...2.3.0)
|
5
|
+
|
6
|
+
**Closed issues:**
|
7
|
+
|
8
|
+
- catalog\_request SSLError [\#30](https://github.com/chef-partners/vmware-vra-gem/issues/30)
|
9
|
+
- Incompatible with vagrant 1.8+ \(at least\) [\#26](https://github.com/chef-partners/vmware-vra-gem/issues/26)
|
10
|
+
|
11
|
+
**Merged pull requests:**
|
12
|
+
|
13
|
+
- Extra parameters [\#50](https://github.com/chef-partners/vmware-vra-gem/pull/50) ([lloydsmithjr03](https://github.com/lloydsmithjr03))
|
14
|
+
- Initial Jenkinsfile for integration tests [\#49](https://github.com/chef-partners/vmware-vra-gem/pull/49) ([jjasghar](https://github.com/jjasghar))
|
15
|
+
|
16
|
+
## [v2.2.0](https://github.com/chef-partners/vmware-vra-gem/tree/v2.2.0) (2017-06-08)
|
17
|
+
[Full Changelog](https://github.com/chef-partners/vmware-vra-gem/compare/v2.1.3...v2.2.0)
|
5
18
|
|
6
19
|
**Closed issues:**
|
7
20
|
|
data/Jenkinsfile
ADDED
@@ -0,0 +1,31 @@
|
|
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/README.md
CHANGED
@@ -96,6 +96,12 @@ If your catalog blueprint item requires additional parameters to successfully su
|
|
96
96
|
catalog_request.set_parameter('my_parameter', 'string', 'my value')
|
97
97
|
```
|
98
98
|
|
99
|
+
If you need to set a parameter on a child object in the blueprint, you can add them by using a ~:
|
100
|
+
|
101
|
+
```
|
102
|
+
catalog_request.set_parameter('object~my_parameter', 'string', 'my value')
|
103
|
+
```
|
104
|
+
|
99
105
|
### Creating a request from a yaml or json payload
|
100
106
|
Should you want to create a request ahead of time you can create the parameters up front by
|
101
107
|
reading from a file or a hard coded payload you use every time. This is not required by any means but allows
|
data/lib/vra/catalog_request.rb
CHANGED
@@ -41,12 +41,16 @@ module Vra
|
|
41
41
|
@additional_params.set(key, type, value)
|
42
42
|
end
|
43
43
|
|
44
|
+
def set_parameters(key, value_data)
|
45
|
+
@additional_params.set_parameters(key, value_data)
|
46
|
+
end
|
47
|
+
|
44
48
|
def delete_parameter(key)
|
45
49
|
@additional_params.delete(key)
|
46
50
|
end
|
47
51
|
|
48
52
|
def parameters
|
49
|
-
@additional_params.
|
53
|
+
@additional_params.to_vra
|
50
54
|
end
|
51
55
|
|
52
56
|
def subtenant_id
|
@@ -72,15 +76,7 @@ module Vra
|
|
72
76
|
hash_payload["data"]["_leaseDays"] = @lease_days
|
73
77
|
hash_payload["description"] = @notes
|
74
78
|
|
75
|
-
|
76
|
-
if hash_payload["data"].key? param.key
|
77
|
-
hash_payload["data"][param.key] = param.value
|
78
|
-
else
|
79
|
-
hash_payload["data"][blueprint_name]["data"][param.key] = param.value
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
JSON.pretty_generate(hash_payload)
|
79
|
+
JSON.pretty_generate(deep_merge(hash_payload, parameters))
|
84
80
|
end
|
85
81
|
|
86
82
|
def submit
|
@@ -98,5 +94,22 @@ module Vra
|
|
98
94
|
request_id = JSON.parse(post_response.body)["id"]
|
99
95
|
Vra::Request.new(client, request_id)
|
100
96
|
end
|
97
|
+
|
98
|
+
def deep_merge(first, second)
|
99
|
+
merger = proc do |key, v1, v2|
|
100
|
+
if Hash === v1 && Hash === v2
|
101
|
+
v1.merge(v2, &merger)
|
102
|
+
elsif Array === v1 && Array === v2
|
103
|
+
v1 | v2
|
104
|
+
elsif [:undefined, nil, :nil].include?(v2)
|
105
|
+
v1
|
106
|
+
else
|
107
|
+
v2
|
108
|
+
end
|
109
|
+
end
|
110
|
+
first.merge(second.to_h, &merger)
|
111
|
+
end
|
112
|
+
|
113
|
+
private :deep_merge
|
101
114
|
end
|
102
115
|
end
|
@@ -16,15 +16,55 @@
|
|
16
16
|
# See the License for the specific language governing permissions and
|
17
17
|
# limitations under the License.
|
18
18
|
#
|
19
|
-
|
20
19
|
module Vra
|
21
20
|
class RequestParameters
|
22
21
|
def initialize
|
23
22
|
@entries = {}
|
24
23
|
end
|
25
24
|
|
25
|
+
def set_parameters(key, value_data, parent = nil)
|
26
|
+
if value_data.key?(:type)
|
27
|
+
if parent.nil?
|
28
|
+
set(key, value_data[:type], value_data[:value])
|
29
|
+
else
|
30
|
+
parent.add_child(Vra::RequestParameter.new(key, value_data[:type], value_data[:value]))
|
31
|
+
end
|
32
|
+
else
|
33
|
+
if parent.nil?
|
34
|
+
p = set(key, nil, nil)
|
35
|
+
else
|
36
|
+
p = Vra::RequestParameter.new(key, nil, nil)
|
37
|
+
parent.add_child(p)
|
38
|
+
end
|
39
|
+
|
40
|
+
value_data.each do |k, data|
|
41
|
+
set_parameters(k, data, p)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
26
46
|
def set(key, type, value)
|
27
|
-
|
47
|
+
if key.to_s.include? "~"
|
48
|
+
split_key = key.split("~")
|
49
|
+
parent = nil
|
50
|
+
split_key.each_with_index do |item, index|
|
51
|
+
if index == 0
|
52
|
+
if @entries[item].nil?
|
53
|
+
@entries[item] = Vra::RequestParameter.new(item, nil, nil)
|
54
|
+
end
|
55
|
+
parent = @entries[item]
|
56
|
+
elsif index == (split_key.count - 1)
|
57
|
+
c = Vra::RequestParameter.new(item, type, value)
|
58
|
+
parent.add_child(c)
|
59
|
+
else
|
60
|
+
p = Vra::RequestParameter.new(item, nil, nil)
|
61
|
+
parent.add_child(p)
|
62
|
+
parent = p
|
63
|
+
end
|
64
|
+
end
|
65
|
+
else
|
66
|
+
@entries[key] = Vra::RequestParameter.new(key, type, value)
|
67
|
+
end
|
28
68
|
end
|
29
69
|
|
30
70
|
def delete(key)
|
@@ -34,24 +74,75 @@ module Vra
|
|
34
74
|
def all_entries
|
35
75
|
@entries.values
|
36
76
|
end
|
77
|
+
|
78
|
+
def to_h
|
79
|
+
hash = {}
|
80
|
+
|
81
|
+
@entries.each do |k, v|
|
82
|
+
hash.merge!(v.to_h)
|
83
|
+
end
|
84
|
+
|
85
|
+
hash
|
86
|
+
end
|
87
|
+
|
88
|
+
def to_vra
|
89
|
+
hash = {
|
90
|
+
"data" => {},
|
91
|
+
}
|
92
|
+
|
93
|
+
@entries.each do |k, v|
|
94
|
+
hash["data"].merge!(v.to_vra)
|
95
|
+
end
|
96
|
+
|
97
|
+
hash
|
98
|
+
end
|
37
99
|
end
|
38
100
|
|
39
101
|
class RequestParameter
|
40
|
-
attr_accessor :key, :type, :value
|
102
|
+
attr_accessor :key, :type, :value, :children
|
41
103
|
def initialize(key, type, value)
|
42
104
|
@key = key
|
43
105
|
@type = type
|
44
106
|
@value = value
|
107
|
+
@children = []
|
108
|
+
end
|
109
|
+
|
110
|
+
def add_child(child)
|
111
|
+
@children.push(child)
|
45
112
|
end
|
46
113
|
|
47
114
|
def to_h
|
48
|
-
{
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
115
|
+
hash = {}
|
116
|
+
|
117
|
+
if @children.count > 0
|
118
|
+
hash[@key] = {}
|
119
|
+
|
120
|
+
@children.each do |c|
|
121
|
+
hash[@key].merge!(c.to_h)
|
122
|
+
end
|
123
|
+
else
|
124
|
+
hash[@key] = format_value
|
125
|
+
end
|
126
|
+
|
127
|
+
hash
|
128
|
+
end
|
129
|
+
|
130
|
+
def to_vra
|
131
|
+
hash = {}
|
132
|
+
|
133
|
+
if @children.count > 0
|
134
|
+
hash[@key] = {}
|
135
|
+
|
136
|
+
hash[@key]["data"] = {}
|
137
|
+
|
138
|
+
@children.each do |c|
|
139
|
+
hash[@key]["data"].merge!(c.to_vra)
|
140
|
+
end
|
141
|
+
else
|
142
|
+
hash[@key] = format_value
|
143
|
+
end
|
144
|
+
|
145
|
+
hash
|
55
146
|
end
|
56
147
|
|
57
148
|
def format_value
|
@@ -59,9 +150,9 @@ module Vra
|
|
59
150
|
when "integer"
|
60
151
|
@value.to_i
|
61
152
|
when "string"
|
62
|
-
@value
|
153
|
+
@value
|
63
154
|
else
|
64
|
-
@value
|
155
|
+
@value
|
65
156
|
end
|
66
157
|
end
|
67
158
|
end
|
data/lib/vra/version.rb
CHANGED
@@ -95,13 +95,59 @@ describe Vra::CatalogRequest do
|
|
95
95
|
|
96
96
|
template = File.read("spec/fixtures/resource/catalog_request.json")
|
97
97
|
payload = JSON.parse(request.merge_payload(template))
|
98
|
-
param1 = payload["data"]["
|
99
|
-
param2 = payload["data"]["
|
98
|
+
param1 = payload["data"]["param1"]
|
99
|
+
param2 = payload["data"]["param2"]
|
100
100
|
|
101
101
|
expect(param1).to be_a(String)
|
102
|
-
expect(param2).to be_a(
|
102
|
+
expect(param2).to be_a(Integer)
|
103
103
|
expect(param1).to eq "my string"
|
104
|
-
expect(param2).to eq
|
104
|
+
expect(param2).to eq 2468
|
105
|
+
end
|
106
|
+
|
107
|
+
it "properly handles additional nested parameters" do
|
108
|
+
request.set_parameter("BP1~param1", "string", "my string")
|
109
|
+
request.set_parameter("BP1~BP2~param2", "integer", 2468)
|
110
|
+
|
111
|
+
template = File.read("spec/fixtures/resource/catalog_request.json")
|
112
|
+
payload = JSON.parse(request.merge_payload(template))
|
113
|
+
param1 = payload["data"]["BP1"]["data"]["param1"]
|
114
|
+
param2 = payload["data"]["BP1"]["data"]["BP2"]["data"]["param2"]
|
115
|
+
|
116
|
+
expect(param1).to be_a(String)
|
117
|
+
expect(param2).to be_a(Integer)
|
118
|
+
expect(param1).to eq "my string"
|
119
|
+
expect(param2).to eq 2468
|
120
|
+
end
|
121
|
+
|
122
|
+
it "properly handles nested parameters" do
|
123
|
+
parameters = {
|
124
|
+
"BP1" => {
|
125
|
+
"param1" => {
|
126
|
+
type: "string",
|
127
|
+
value: "my string",
|
128
|
+
},
|
129
|
+
"BP2" => {
|
130
|
+
"param2" => {
|
131
|
+
type: "integer",
|
132
|
+
value: 2468,
|
133
|
+
},
|
134
|
+
},
|
135
|
+
},
|
136
|
+
}
|
137
|
+
|
138
|
+
parameters.each do |k, v|
|
139
|
+
request.set_parameters(k, v)
|
140
|
+
end
|
141
|
+
|
142
|
+
template = File.read("spec/fixtures/resource/catalog_request.json")
|
143
|
+
payload = JSON.parse(request.merge_payload(template))
|
144
|
+
param1 = payload["data"]["BP1"]["data"]["param1"]
|
145
|
+
param2 = payload["data"]["BP1"]["data"]["BP2"]["data"]["param2"]
|
146
|
+
|
147
|
+
expect(param1).to be_a(String)
|
148
|
+
expect(param2).to be_a(Integer)
|
149
|
+
expect(param1).to eq "my string"
|
150
|
+
expect(param2).to eq 2468
|
105
151
|
end
|
106
152
|
end
|
107
153
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmware-vra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Leff
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-06-
|
12
|
+
date: 2017-06-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi-yajl
|
@@ -151,6 +151,7 @@ files:
|
|
151
151
|
- ".travis.yml"
|
152
152
|
- CHANGELOG.md
|
153
153
|
- Gemfile
|
154
|
+
- Jenkinsfile
|
154
155
|
- LICENSE.txt
|
155
156
|
- README.md
|
156
157
|
- Rakefile
|