vcloud-walker 3.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +9 -0
- data/Gemfile +12 -0
- data/LICENSE +20 -0
- data/README.md +55 -0
- data/Rakefile +21 -0
- data/bin/vcloud-walk +41 -0
- data/docs/examples/catalogs.json +40 -0
- data/docs/examples/edgegateways.json +285 -0
- data/docs/examples/networks.json +53 -0
- data/docs/examples/vdcs.json +221 -0
- data/jenkins.sh +9 -0
- data/jenkins_integration_tests.sh +11 -0
- data/lib/vcloud/walker/fog_interface.rb +48 -0
- data/lib/vcloud/walker/resource/catalog.rb +29 -0
- data/lib/vcloud/walker/resource/catalog_item.rb +25 -0
- data/lib/vcloud/walker/resource/collection.rb +13 -0
- data/lib/vcloud/walker/resource/entity.rb +27 -0
- data/lib/vcloud/walker/resource/gateway_ipsec_vpn_service.rb +46 -0
- data/lib/vcloud/walker/resource/network.rb +38 -0
- data/lib/vcloud/walker/resource/organization.rb +45 -0
- data/lib/vcloud/walker/resource/vapp.rb +46 -0
- data/lib/vcloud/walker/resource/vdc.rb +35 -0
- data/lib/vcloud/walker/resource/vm.rb +85 -0
- data/lib/vcloud/walker/resource.rb +11 -0
- data/lib/vcloud/walker/vcloud_session.rb +13 -0
- data/lib/vcloud/walker/version.rb +5 -0
- data/lib/vcloud/walker.rb +23 -0
- data/scripts/configure_walker_ci_vse.rb +31 -0
- data/scripts/data/walker_ci/carrenza.yaml +17 -0
- data/scripts/data/walker_ci/skyscape.yaml +17 -0
- data/scripts/generate_fog_conf_file.sh +6 -0
- data/spec/fog_interface_spec.rb +93 -0
- data/spec/integration/vcloud_walker_spec.rb +74 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/stubs/service_layer_stub.rb +109 -0
- data/spec/stubs/stubs.rb +46 -0
- data/spec/vcloud/walker_spec.rb +59 -0
- data/spec/walk/catalogs_spec.rb +31 -0
- data/spec/walk/entity_spec.rb +69 -0
- data/spec/walk/gateway_ipsec_vpn_service_spec.rb +157 -0
- data/spec/walk/network_spec.rb +70 -0
- data/spec/walk/organization_spec.rb +53 -0
- data/spec/walk/vapp_spec.rb +24 -0
- data/spec/walk/vdcs_spec.rb +30 -0
- data/spec/walk/vm_spec.rb +122 -0
- data/vcloud-walker.gemspec +31 -0
- metadata +274 -0
@@ -0,0 +1,221 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"id": "074aea1e-a5e9-4dd1-a028-40db8c98d237",
|
4
|
+
"name": "Test Vdc",
|
5
|
+
"description": "",
|
6
|
+
"vapps": [
|
7
|
+
{
|
8
|
+
"name": "vcloud-walker-vapp",
|
9
|
+
"status": "4",
|
10
|
+
"deployed": "true",
|
11
|
+
"id": "urn:vcloud:vapp:e6db5703-0f33-4c65-8e1f-f54ae0ff2864",
|
12
|
+
"description": "this app is used to run integration tests for vcloud-walker",
|
13
|
+
"network_config": [
|
14
|
+
{
|
15
|
+
"network_name": "Default",
|
16
|
+
"is_deployed": "true",
|
17
|
+
"description": "The nat network",
|
18
|
+
"config": {
|
19
|
+
"ipscopes": {
|
20
|
+
"IpScope": {
|
21
|
+
"IsInherited": "true",
|
22
|
+
"Gateway": "192.168.2.1",
|
23
|
+
"Netmask": "255.255.255.240",
|
24
|
+
"Dns1": "8.8.8.8",
|
25
|
+
"Dns2": "8.8.4.4",
|
26
|
+
"DnsSuffix": "tester.default",
|
27
|
+
"IsEnabled": "true",
|
28
|
+
"IpRanges": {
|
29
|
+
"IpRange": {
|
30
|
+
"StartAddress": "192.168.2.2",
|
31
|
+
"EndAddress": "192.168.2.14"
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
35
|
+
}
|
36
|
+
},
|
37
|
+
"parent_network": "Default"
|
38
|
+
}
|
39
|
+
],
|
40
|
+
"network_section": {
|
41
|
+
"ovf_name": "Default",
|
42
|
+
"ovf:Description": "The nat network"
|
43
|
+
},
|
44
|
+
"vms": [
|
45
|
+
{
|
46
|
+
"id": "urn:vcloud:vm:d19d84a5-c950-4497-a638-23eccc4226a5",
|
47
|
+
"status": "4",
|
48
|
+
"operating_system": "Ubuntu Linux (64-bit)",
|
49
|
+
"network_connections": {
|
50
|
+
"network": "Default",
|
51
|
+
"needsCustomization": "true",
|
52
|
+
"NetworkConnectionIndex": "0",
|
53
|
+
"IpAddress": "192.168.2.2",
|
54
|
+
"IsConnected": "true",
|
55
|
+
"MACAddress": "00:50:56:01:0b:1a",
|
56
|
+
"IpAddressAllocationMode": "MANUAL"
|
57
|
+
},
|
58
|
+
"primary_network_connection_index": "0",
|
59
|
+
"cpu": "1 virtual CPU(s)",
|
60
|
+
"memory": "256 MB of memory",
|
61
|
+
"disks": [
|
62
|
+
{
|
63
|
+
"name": "Hard disk 1",
|
64
|
+
"size": 11265
|
65
|
+
}
|
66
|
+
]
|
67
|
+
}
|
68
|
+
]
|
69
|
+
},
|
70
|
+
{
|
71
|
+
"name": "vApp-2",
|
72
|
+
"status": "8",
|
73
|
+
"deployed": "true",
|
74
|
+
"id": "urn:vcloud:vapp:ee27028f-1424-4225-92a2-9deca813cca8",
|
75
|
+
"description": "vapp-2 test app",
|
76
|
+
"network_config": [
|
77
|
+
{
|
78
|
+
"network_name": "Default",
|
79
|
+
"is_deployed": "true",
|
80
|
+
"description": "The nat network",
|
81
|
+
"config": {
|
82
|
+
"ipscopes": {
|
83
|
+
"IpScope": {
|
84
|
+
"IsInherited": "true",
|
85
|
+
"Gateway": "192.168.2.1",
|
86
|
+
"Netmask": "255.255.255.240",
|
87
|
+
"Dns1": "8.8.8.8",
|
88
|
+
"Dns2": "8.8.4.4",
|
89
|
+
"DnsSuffix": "tester.default",
|
90
|
+
"IsEnabled": "true",
|
91
|
+
"IpRanges": {
|
92
|
+
"IpRange": {
|
93
|
+
"StartAddress": "192.168.2.2",
|
94
|
+
"EndAddress": "192.168.2.14"
|
95
|
+
}
|
96
|
+
}
|
97
|
+
}
|
98
|
+
}
|
99
|
+
},
|
100
|
+
"parent_network": "Default"
|
101
|
+
}
|
102
|
+
],
|
103
|
+
"network_section": {
|
104
|
+
"ovf_name": "Default",
|
105
|
+
"ovf:Description": "The nat network"
|
106
|
+
},
|
107
|
+
"vms": [
|
108
|
+
{
|
109
|
+
"id": "urn:vcloud:vm:b0a89e9f-0339-4913-acdd-864b12898e53",
|
110
|
+
"status": "8",
|
111
|
+
"operating_system": "Ubuntu Linux (64-bit)",
|
112
|
+
"network_connections": {
|
113
|
+
"network": "Default",
|
114
|
+
"needsCustomization": "true",
|
115
|
+
"NetworkConnectionIndex": "0",
|
116
|
+
"IpAddress": "fe80:0:0:0:250:56ff:fe01:c18",
|
117
|
+
"IsConnected": "true",
|
118
|
+
"MACAddress": "00:50:56:01:0c:18",
|
119
|
+
"IpAddressAllocationMode": "DHCP"
|
120
|
+
},
|
121
|
+
"primary_network_connection_index": "0",
|
122
|
+
"cpu": "1 virtual CPU(s)",
|
123
|
+
"memory": "256 MB of memory",
|
124
|
+
"disks": [
|
125
|
+
{
|
126
|
+
"name": "Hard disk 1",
|
127
|
+
"size": 11265
|
128
|
+
}
|
129
|
+
]
|
130
|
+
}
|
131
|
+
]
|
132
|
+
},
|
133
|
+
{
|
134
|
+
"name": "vapp-1",
|
135
|
+
"status": "8",
|
136
|
+
"deployed": "true",
|
137
|
+
"id": "urn:vcloud:vapp:1cad91a8-04c2-4f0d-9c62-ad4463b5197f",
|
138
|
+
"description": "vapp 1",
|
139
|
+
"network_config": [
|
140
|
+
{
|
141
|
+
"network_name": "Default",
|
142
|
+
"is_deployed": "true",
|
143
|
+
"description": "The nat network",
|
144
|
+
"config": {
|
145
|
+
"ipscopes": {
|
146
|
+
"IpScope": {
|
147
|
+
"IsInherited": "true",
|
148
|
+
"Gateway": "192.168.2.1",
|
149
|
+
"Netmask": "255.255.255.240",
|
150
|
+
"Dns1": "8.8.8.8",
|
151
|
+
"Dns2": "8.8.4.4",
|
152
|
+
"DnsSuffix": "tester.default",
|
153
|
+
"IsEnabled": "true",
|
154
|
+
"IpRanges": {
|
155
|
+
"IpRange": {
|
156
|
+
"StartAddress": "192.168.2.2",
|
157
|
+
"EndAddress": "192.168.2.14"
|
158
|
+
}
|
159
|
+
}
|
160
|
+
}
|
161
|
+
}
|
162
|
+
},
|
163
|
+
"parent_network": "Default"
|
164
|
+
}
|
165
|
+
],
|
166
|
+
"network_section": {
|
167
|
+
"ovf_name": "Default",
|
168
|
+
"ovf:Description": "The nat network"
|
169
|
+
},
|
170
|
+
"vms": [
|
171
|
+
{
|
172
|
+
"id": "urn:vcloud:vm:24bda672-cc1c-4d56-ab3b-19c0ba20d1b4",
|
173
|
+
"status": "8",
|
174
|
+
"operating_system": "Ubuntu Linux (64-bit)",
|
175
|
+
"network_connections": {
|
176
|
+
"network": "Default",
|
177
|
+
"needsCustomization": "true",
|
178
|
+
"NetworkConnectionIndex": "0",
|
179
|
+
"IpAddress": "fe80:0:0:0:250:56ff:fe01:c17",
|
180
|
+
"IsConnected": "true",
|
181
|
+
"MACAddress": "00:50:56:01:0c:17",
|
182
|
+
"IpAddressAllocationMode": "DHCP"
|
183
|
+
},
|
184
|
+
"primary_network_connection_index": "0",
|
185
|
+
"cpu": "1 virtual CPU(s)",
|
186
|
+
"memory": "256 MB of memory",
|
187
|
+
"disks": [
|
188
|
+
{
|
189
|
+
"name": "Hard disk 1",
|
190
|
+
"size": 11265
|
191
|
+
}
|
192
|
+
]
|
193
|
+
}
|
194
|
+
]
|
195
|
+
}
|
196
|
+
],
|
197
|
+
"quotas": {
|
198
|
+
"network": 20,
|
199
|
+
"nic": 0,
|
200
|
+
"vm": 100
|
201
|
+
},
|
202
|
+
"compute_capacity": {
|
203
|
+
"Cpu": {
|
204
|
+
"Units": "MHz",
|
205
|
+
"Allocated": "0",
|
206
|
+
"Limit": "0",
|
207
|
+
"Reserved": "0",
|
208
|
+
"Used": "2000",
|
209
|
+
"Overhead": "0"
|
210
|
+
},
|
211
|
+
"Memory": {
|
212
|
+
"Units": "MB",
|
213
|
+
"Allocated": "0",
|
214
|
+
"Limit": "0",
|
215
|
+
"Reserved": "0",
|
216
|
+
"Used": "256",
|
217
|
+
"Overhead": "21"
|
218
|
+
}
|
219
|
+
}
|
220
|
+
}
|
221
|
+
]
|
data/jenkins.sh
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
module Vcloud
|
2
|
+
module Walker
|
3
|
+
class FogInterface
|
4
|
+
|
5
|
+
def self.get_catalogs
|
6
|
+
org = get_org
|
7
|
+
org.catalogs.all(false)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.get_vdcs
|
11
|
+
org = get_org
|
12
|
+
org.vdcs.all(false)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.get_networks
|
16
|
+
org = get_org
|
17
|
+
org.networks.all(false)
|
18
|
+
end
|
19
|
+
|
20
|
+
# we use the request here as we don't yet have a model for Edge Gateways
|
21
|
+
def self.get_edge_gateways
|
22
|
+
vcloud = VcloudSession.instance
|
23
|
+
get_vdcs.collect do |vdc|
|
24
|
+
data = vcloud.get_org_vdc_gateways(vdc.id).body
|
25
|
+
if data[:EdgeGatewayRecord]
|
26
|
+
edge_gateways = data[:EdgeGatewayRecord].is_a?(Hash) ? [data[:EdgeGatewayRecord]] : data[:EdgeGatewayRecord]
|
27
|
+
edge_gateways.map do |edgeGateway|
|
28
|
+
vcloud.get_edge_gateway(edgeGateway[:href].split('/').last).body
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end.flatten.compact
|
32
|
+
end
|
33
|
+
|
34
|
+
# service-layer
|
35
|
+
def self.get_vapp vapp_id
|
36
|
+
VcloudSession.instance.get_vapp(vapp_id).body
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
def self.get_org
|
41
|
+
vcloud = VcloudSession.instance
|
42
|
+
vcloud.organizations.get_by_name(vcloud.org_name)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Vcloud
|
2
|
+
module Walker
|
3
|
+
module Resource
|
4
|
+
class Catalog < Entity
|
5
|
+
attr_reader :id, :name, :description, :items
|
6
|
+
|
7
|
+
def initialize(fog_catalog)
|
8
|
+
@id = fog_catalog.id
|
9
|
+
@name = fog_catalog.name
|
10
|
+
@description = fog_catalog.description
|
11
|
+
@items = CatalogItems.new(fog_catalog.catalog_items.all(false))
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
class Catalogs < Collection
|
17
|
+
|
18
|
+
def initialize fog_catalogs
|
19
|
+
fog_catalogs.each do |catalog|
|
20
|
+
self << Resource::Catalog.new(catalog)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Vcloud
|
2
|
+
module Walker
|
3
|
+
module Resource
|
4
|
+
class CatalogItem < Entity
|
5
|
+
attr_reader :id, :name, :description, :vapp_template_id
|
6
|
+
|
7
|
+
def initialize fog_catalog_item
|
8
|
+
@id = fog_catalog_item.id
|
9
|
+
@name = fog_catalog_item.name
|
10
|
+
@description = fog_catalog_item.description
|
11
|
+
@vapp_template_id = fog_catalog_item.vapp_template_id
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class CatalogItems < Collection
|
16
|
+
def initialize fog_catalog_items
|
17
|
+
fog_catalog_items.each do |i|
|
18
|
+
self << Resource::CatalogItem.new(i)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Vcloud
|
2
|
+
module Walker
|
3
|
+
module Resource
|
4
|
+
class Entity
|
5
|
+
|
6
|
+
def to_summary
|
7
|
+
h= {}
|
8
|
+
instance_variables.each { |atr|
|
9
|
+
atr_value = self.instance_variable_get(atr)
|
10
|
+
if atr_value.is_a?(Vcloud::Walker::Resource::Collection) || atr_value.is_a?(Entity)
|
11
|
+
h[atr.to_s.delete("@").to_sym] = atr_value.to_summary
|
12
|
+
else
|
13
|
+
h[atr.to_s.delete("@").to_sym] = atr_value
|
14
|
+
end
|
15
|
+
}
|
16
|
+
h
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
def extract_id(href)
|
21
|
+
href.split('/').last
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Vcloud
|
2
|
+
module Walker
|
3
|
+
module Resource
|
4
|
+
class GatewayIpsecVpnService < Entity
|
5
|
+
attr_reader :IsEnabled, :Tunnels
|
6
|
+
|
7
|
+
def initialize fog_vpn_service
|
8
|
+
@IsEnabled = fog_vpn_service[:IsEnabled]
|
9
|
+
if fog_vpn_service[:Tunnel]
|
10
|
+
fog_vpn_tunnels = [fog_vpn_service[:Tunnel]].flatten
|
11
|
+
@Tunnels = populate_tunnel_info(fog_vpn_tunnels)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def populate_tunnel_info(fog_vpn_tunnels)
|
17
|
+
return if fog_vpn_tunnels.empty?
|
18
|
+
fog_vpn_tunnels.collect do |fog_vpn_tunnel|
|
19
|
+
@tunnel = {
|
20
|
+
:Name => fog_vpn_tunnel[:Name],
|
21
|
+
:Description => fog_vpn_tunnel[:Description],
|
22
|
+
:ThirdPartyPeerId => fog_vpn_tunnel[:IpsecVpnThirdPartyPeer][:PeerId],
|
23
|
+
:PeerId => fog_vpn_tunnel[:PeerId],
|
24
|
+
:LocalId => fog_vpn_tunnel[:LocalId],
|
25
|
+
:PeerIpAddress => fog_vpn_tunnel[:PeerIpAddress],
|
26
|
+
:LocalIpAddress => fog_vpn_tunnel[:LocalIpAddress],
|
27
|
+
:PeerSubnet => fog_vpn_tunnel[:PeerSubnet],
|
28
|
+
:LocalSubnet => fog_vpn_tunnel[:LocalSubnet],
|
29
|
+
:Mtu => fog_vpn_tunnel[:Mtu],
|
30
|
+
:IsEnabled => fog_vpn_tunnel[:IsEnabled],
|
31
|
+
:IsOperational => fog_vpn_tunnel[:IsOperational]
|
32
|
+
}
|
33
|
+
|
34
|
+
@tunnel[:SharedSecret] = "*" * 65 if fog_vpn_tunnel[:SharedSecret]
|
35
|
+
@tunnel[:SharedSecretEncrypted] = "******" if fog_vpn_tunnel[:SharedSecretEncrypted]
|
36
|
+
@tunnel[:EncryptionProtocol] = "******" if fog_vpn_tunnel[:EncryptionProtocol]
|
37
|
+
@tunnel
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Vcloud
|
2
|
+
module Walker
|
3
|
+
|
4
|
+
module Resource
|
5
|
+
|
6
|
+
class Networks < Resource::Collection
|
7
|
+
|
8
|
+
def initialize fog_networks
|
9
|
+
fog_networks.each do |org_network|
|
10
|
+
self << Resource::Network.new(org_network)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
class Network < Entity
|
18
|
+
attr_reader :id, :name, :description, :is_inherited, :gateway, :netmask, :dns1, :dns2, :dns_suffix, :ip_ranges
|
19
|
+
|
20
|
+
def initialize org_network
|
21
|
+
@id = org_network.id
|
22
|
+
@name = org_network.name
|
23
|
+
@description = org_network.description
|
24
|
+
@is_inherited = org_network.is_inherited
|
25
|
+
@gateway = org_network.gateway
|
26
|
+
@netmask = org_network.netmask
|
27
|
+
@dns1 = org_network.dns1
|
28
|
+
@dns2 = org_network.dns2
|
29
|
+
@dns_suffix = org_network.dns_suffix
|
30
|
+
@ip_ranges = org_network.ip_ranges
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Vcloud
|
2
|
+
module Walker
|
3
|
+
module Resource
|
4
|
+
class Organization < Entity
|
5
|
+
def self.catalogs
|
6
|
+
fog_catalogs = FogInterface.get_catalogs
|
7
|
+
Catalogs.new(fog_catalogs).to_summary
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.vdcs
|
11
|
+
fog_vdcs = FogInterface.get_vdcs
|
12
|
+
Vdcs.new(fog_vdcs).to_summary
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.edgegateways
|
16
|
+
fog_edge_gateways = FogInterface.get_edge_gateways
|
17
|
+
fog_edge_gateways.collect do |edge_gw|
|
18
|
+
edge_gw[:id] = edge_gw[:href].split('/').last
|
19
|
+
edgegw_service_configuration = edge_gw[:Configuration][:EdgeGatewayServiceConfiguration]
|
20
|
+
if edgegw_service_configuration[:GatewayIpsecVpnService]
|
21
|
+
edgegw_service_configuration[:GatewayIpsecVpnService] = GatewayIpsecVpnService.new(edgegw_service_configuration[:GatewayIpsecVpnService]).to_summary
|
22
|
+
end
|
23
|
+
edge_gw
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.networks
|
28
|
+
fog_networks = FogInterface.get_networks
|
29
|
+
Networks.new(fog_networks).to_summary
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.organization
|
33
|
+
{
|
34
|
+
:vdcs => vdcs,
|
35
|
+
:networks => networks,
|
36
|
+
:catalogs => catalogs,
|
37
|
+
:edgegateways => edgegateways,
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Vcloud
|
2
|
+
module Walker
|
3
|
+
module Resource
|
4
|
+
class VApp < Entity
|
5
|
+
attr_reader :id, :name, :status, :description, :network_config, :vms, :deployed, :network_section, :metadata
|
6
|
+
|
7
|
+
def initialize fog_vapp
|
8
|
+
@name = fog_vapp[:name]
|
9
|
+
@status = fog_vapp[:status]
|
10
|
+
@description = fog_vapp[:Description]
|
11
|
+
@deployed = fog_vapp[:deployed]
|
12
|
+
@id = extract_id(fog_vapp[:href])
|
13
|
+
@network_config = extract_network_config(fog_vapp[:NetworkConfigSection][:NetworkConfig])
|
14
|
+
@network_section = fog_vapp[:'ovf:NetworkSection'][:'ovf:Network']
|
15
|
+
@vms = Resource::Vms.new(fog_vapp[:Children][:Vm])
|
16
|
+
@metadata = Vcloud::Core::Vapp.get_metadata(id)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
def extract_network_config network_configs
|
21
|
+
(network_configs.is_a?(Hash) ? [network_configs] : network_configs).collect do |network_config|
|
22
|
+
{
|
23
|
+
network_name: network_config[:networkName],
|
24
|
+
is_deployed: network_config[:IsDeployed],
|
25
|
+
description: network_config[:Description],
|
26
|
+
config: {
|
27
|
+
ipscopes: network_config[:Configuration][:IpScopes]
|
28
|
+
},
|
29
|
+
parent_network: network_config[:Configuration][:ParentNetwork] ? network_config[:Configuration][:ParentNetwork][:name] : nil
|
30
|
+
}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
class VApps < Collection
|
37
|
+
def initialize ids
|
38
|
+
ids.each do |vapp_id|
|
39
|
+
vapp = FogInterface.get_vapp(vapp_id)
|
40
|
+
self << Resource::VApp.new(vapp)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Vcloud
|
2
|
+
module Walker
|
3
|
+
module Resource
|
4
|
+
class Vdcs < Collection
|
5
|
+
|
6
|
+
def initialize fog_vdcs
|
7
|
+
fog_vdcs.each do |vdc|
|
8
|
+
self << Resource::Vdc.new(vdc)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
class Vdc < Entity
|
16
|
+
attr_reader :vapps, :id, :name, :description, :quotas, :compute_capacity
|
17
|
+
|
18
|
+
def initialize(fog_vdc)
|
19
|
+
@id = fog_vdc.id
|
20
|
+
@name = fog_vdc.name
|
21
|
+
@description = fog_vdc.description
|
22
|
+
@vapps = Resource::VApps.new(fog_vdc.vapps.map(&:id))
|
23
|
+
@quotas = {network: fog_vdc.network_quota, nic: fog_vdc.nic_quota, vm: fog_vdc.vm_quota}
|
24
|
+
@compute_capacity = fog_vdc.compute_capacity
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
|