vcloud-core 0.0.5 → 0.0.6
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.
- data/CHANGELOG.md +23 -0
- data/lib/vcloud/core.rb +1 -0
- data/lib/vcloud/core/edge_gateway.rb +9 -0
- data/lib/vcloud/core/edge_gateway_interface.rb +30 -0
- data/lib/vcloud/core/version.rb +1 -1
- data/spec/vcloud/core/edge_gateway_interface_spec.rb +100 -0
- data/spec/vcloud/core/edge_gateway_spec.rb +35 -22
- metadata +7 -3
data/CHANGELOG.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
## 0.0.6 (2014-02-13)
|
2
|
+
|
3
|
+
Features:
|
4
|
+
|
5
|
+
- adds EdgeGateway.interfaces for returning array of EdgeGatewayInterface objects
|
6
|
+
associated with the EdgeGateway
|
7
|
+
- adds EdgeGatewayInterface class, representing a vCloud GatewayInterfaceType
|
8
|
+
|
9
|
+
## 0.0.5 (2014-01-29)
|
10
|
+
|
11
|
+
Features:
|
12
|
+
|
13
|
+
- adds support for retrieving gateway interface by id
|
14
|
+
|
15
|
+
## 0.0.4 (2014-01-23)
|
16
|
+
|
17
|
+
Features:
|
18
|
+
|
19
|
+
- adds ability to update Edge Gateway configuration
|
20
|
+
|
21
|
+
## 0.0.1 (2014-01-17)
|
22
|
+
|
23
|
+
- First release of gem
|
data/lib/vcloud/core.rb
CHANGED
@@ -8,6 +8,7 @@ require 'vcloud/core/metadata_helper'
|
|
8
8
|
require 'vcloud/core/compute_metadata'
|
9
9
|
require 'vcloud/core/vdc'
|
10
10
|
require 'vcloud/core/edge_gateway'
|
11
|
+
require 'vcloud/core/edge_gateway_interface'
|
11
12
|
require 'vcloud/core/vm'
|
12
13
|
require 'vcloud/core/vapp'
|
13
14
|
require 'vcloud/core/vapp_template'
|
@@ -55,6 +55,15 @@ module Vcloud
|
|
55
55
|
vcloud_attributes[:name]
|
56
56
|
end
|
57
57
|
|
58
|
+
def interfaces
|
59
|
+
gateway_config = vcloud_attributes[:Configuration]
|
60
|
+
return [] unless gateway_config[:GatewayInterfaces]
|
61
|
+
return [] unless gateway_interfaces = gateway_config[:GatewayInterfaces][:GatewayInterface]
|
62
|
+
gateway_interfaces.map do |vcloud_gateway_interface_hash|
|
63
|
+
EdgeGatewayInterface.new(vcloud_gateway_interface_hash)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
58
67
|
end
|
59
68
|
end
|
60
69
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Vcloud
|
2
|
+
module Core
|
3
|
+
class EdgeGatewayInterface
|
4
|
+
|
5
|
+
attr_accessor :name, :network_href, :network_name
|
6
|
+
|
7
|
+
def initialize(gateway_interface_hash)
|
8
|
+
raise "Argument error: nil not allowed" if gateway_interface_hash.nil?
|
9
|
+
@vcloud_gateway_interface = gateway_interface_hash
|
10
|
+
unless @name = gateway_interface_hash[:Name]
|
11
|
+
raise "Argument error: must have a :Name"
|
12
|
+
end
|
13
|
+
unless network_section = gateway_interface_hash[:Network]
|
14
|
+
raise "Argument error: must have a :Network section"
|
15
|
+
end
|
16
|
+
unless @network_href = network_section[:href]
|
17
|
+
raise "Argument error: must have a :Network[:href]"
|
18
|
+
end
|
19
|
+
unless @network_name = network_section[:name]
|
20
|
+
raise "Argument error: must have a :Network[:name]"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def network_id
|
25
|
+
network_href.split('/').last
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/vcloud/core/version.rb
CHANGED
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Vcloud
|
4
|
+
module Core
|
5
|
+
describe EdgeGatewayInterface do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@valid_ext_id = "12345678-70ac-487e-9c1e-124716764274"
|
9
|
+
@gateway_interface_hash = {
|
10
|
+
:Name=>"EXTERNAL_NETWORK",
|
11
|
+
:Network=>{
|
12
|
+
:type=>"application/vnd.vmware.admin.network+xml",
|
13
|
+
:name=>"EXTERNAL_NETWORK",
|
14
|
+
:href=>"https://example.com/api/admin/network/#{@valid_ext_id}"
|
15
|
+
},
|
16
|
+
:InterfaceType=>"uplink",
|
17
|
+
:SubnetParticipation=>{
|
18
|
+
:Gateway=>"192.2.0.1",
|
19
|
+
:Netmask=>"255.255.255.0",
|
20
|
+
:IpAddress=>"192.2.0.66"
|
21
|
+
},
|
22
|
+
:UseForDefaultRoute=>"true"
|
23
|
+
}
|
24
|
+
@interface = EdgeGatewayInterface.new(@gateway_interface_hash)
|
25
|
+
end
|
26
|
+
|
27
|
+
context "Instance public interface" do
|
28
|
+
subject { EdgeGatewayInterface.new(@gateway_interface_hash) }
|
29
|
+
it { should respond_to(:name) }
|
30
|
+
it { should respond_to(:network_id) }
|
31
|
+
it { should respond_to(:network_name) }
|
32
|
+
it { should respond_to(:network_href) }
|
33
|
+
end
|
34
|
+
|
35
|
+
context "#initialize" do
|
36
|
+
|
37
|
+
it "should be constructable from just a Fog vCloud GatewayInterfaceType hash" do
|
38
|
+
obj = EdgeGatewayInterface.new(@gateway_interface_hash)
|
39
|
+
expect(obj.class).to be(Vcloud::Core::EdgeGatewayInterface)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should raise an error if passed a nil value" do
|
43
|
+
expect { EdgeGatewayInterface.new(nil) }.to raise_error("Argument error: nil not allowed")
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should raise an error if a :Name is not passed" do
|
47
|
+
expect { EdgeGatewayInterface.new({}) }.to raise_error("Argument error: must have a :Name")
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should raise an error if a :Network is not passed" do
|
51
|
+
expect { EdgeGatewayInterface.new({Name: 'test-interface'}) }.to raise_error("Argument error: must have a :Network section")
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should raise an error if a :Network :href is not passed" do
|
55
|
+
bad_input = {
|
56
|
+
Name: 'test-interface',
|
57
|
+
Network: { name: "test-network" }
|
58
|
+
}
|
59
|
+
expect { EdgeGatewayInterface.new(bad_input) }.to raise_error("Argument error: must have a :Network[:href]")
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should raise an error if a :Network :name is not passed" do
|
63
|
+
bad_input = {
|
64
|
+
Name: 'test-interface',
|
65
|
+
Network: { href: "http://example.com/1234" }
|
66
|
+
}
|
67
|
+
expect { EdgeGatewayInterface.new(bad_input) }.to raise_error("Argument error: must have a :Network[:name]")
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
context "#name" do
|
73
|
+
it "should return the name of the interface" do
|
74
|
+
expect(@interface.name).to eq('EXTERNAL_NETWORK')
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context "#network_id" do
|
79
|
+
it "should return the id of the network the interface is connected to" do
|
80
|
+
expect(@interface.network_id).to eq(@valid_ext_id)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context "#network_name" do
|
85
|
+
it "should return the name of the network the interface is connected to" do
|
86
|
+
expect(@interface.network_name).to eq('EXTERNAL_NETWORK')
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "#network_href" do
|
91
|
+
it "should return the href of the network the interface is connected to" do
|
92
|
+
expect(@interface.network_href).to eq("https://example.com/api/admin/network/#{@valid_ext_id}")
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
@@ -73,7 +73,7 @@ module Vcloud
|
|
73
73
|
|
74
74
|
end
|
75
75
|
|
76
|
-
context "
|
76
|
+
context "Interface related tests" do
|
77
77
|
|
78
78
|
before(:each) do
|
79
79
|
@valid_ext_id = "12345678-70ac-487e-9c1e-124716764274"
|
@@ -117,29 +117,42 @@ module Vcloud
|
|
117
117
|
@edgegw = EdgeGateway.new(@edgegw_id)
|
118
118
|
end
|
119
119
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
120
|
+
context "#vcloud_gateway_interface_by_id" do
|
121
|
+
|
122
|
+
it "should return nil if the network id is not found" do
|
123
|
+
expect(@edgegw.vcloud_gateway_interface_by_id(
|
124
|
+
'12345678-1234-1234-1234-123456789012')).
|
125
|
+
to be_nil
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should return a vcloud network hash if the network id is found" do
|
129
|
+
expect(@edgegw.vcloud_gateway_interface_by_id(@valid_int_id)).
|
130
|
+
to eq(
|
131
|
+
{:Name=>"INTERNAL_NETWORK",
|
132
|
+
:Network=>
|
133
|
+
{:type=>"application/vnd.vmware.admin.network+xml",
|
134
|
+
:name=>"INTERNAL_NETWORK",
|
135
|
+
:href=>
|
136
|
+
"https://example.com/api/admin/network/#{@valid_int_id}"},
|
137
|
+
:InterfaceType=>"internal",
|
138
|
+
:SubnetParticipation=>
|
139
|
+
{:Gateway=>"192.168.1.1",
|
140
|
+
:Netmask=>"255.255.255.0",
|
141
|
+
:IpAddress=>"192.168.1.55"},
|
142
|
+
:UseForDefaultRoute=>"false"
|
143
|
+
},
|
144
|
+
)
|
145
|
+
end
|
124
146
|
end
|
125
147
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
"https://example.com/api/admin/network/#{@valid_int_id}"},
|
135
|
-
:InterfaceType=>"internal",
|
136
|
-
:SubnetParticipation=>
|
137
|
-
{:Gateway=>"192.168.1.1",
|
138
|
-
:Netmask=>"255.255.255.0",
|
139
|
-
:IpAddress=>"192.168.1.55"},
|
140
|
-
:UseForDefaultRoute=>"false"
|
141
|
-
},
|
142
|
-
)
|
148
|
+
context "#interfaces" do
|
149
|
+
|
150
|
+
it "should return an array of EdgeGatewayInterface objects" do
|
151
|
+
interfaces_list = @edgegw.interfaces
|
152
|
+
expect(interfaces_list.class).to be(Array)
|
153
|
+
expect(interfaces_list.first.class).to be(Vcloud::Core::EdgeGatewayInterface)
|
154
|
+
end
|
155
|
+
|
143
156
|
end
|
144
157
|
|
145
158
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vcloud-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-02-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fog
|
@@ -117,6 +117,7 @@ extensions: []
|
|
117
117
|
extra_rdoc_files: []
|
118
118
|
files:
|
119
119
|
- .gitignore
|
120
|
+
- CHANGELOG.md
|
120
121
|
- Gemfile
|
121
122
|
- LICENSE.txt
|
122
123
|
- README.md
|
@@ -126,6 +127,7 @@ files:
|
|
126
127
|
- lib/vcloud/core.rb
|
127
128
|
- lib/vcloud/core/compute_metadata.rb
|
128
129
|
- lib/vcloud/core/edge_gateway.rb
|
130
|
+
- lib/vcloud/core/edge_gateway_interface.rb
|
129
131
|
- lib/vcloud/core/entity.rb
|
130
132
|
- lib/vcloud/core/metadata_helper.rb
|
131
133
|
- lib/vcloud/core/org_vdc_network.rb
|
@@ -144,6 +146,7 @@ files:
|
|
144
146
|
- spec/integration/edge_gateway/edge_gateway_spec.rb
|
145
147
|
- spec/spec_helper.rb
|
146
148
|
- spec/support/stub_fog_interface.rb
|
149
|
+
- spec/vcloud/core/edge_gateway_interface_spec.rb
|
147
150
|
- spec/vcloud/core/edge_gateway_spec.rb
|
148
151
|
- spec/vcloud/core/metadata_helper_spec.rb
|
149
152
|
- spec/vcloud/core/org_vdc_network_spec.rb
|
@@ -178,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
181
|
version: '0'
|
179
182
|
segments:
|
180
183
|
- 0
|
181
|
-
hash:
|
184
|
+
hash: 4034652362745429730
|
182
185
|
requirements: []
|
183
186
|
rubyforge_project:
|
184
187
|
rubygems_version: 1.8.23
|
@@ -190,6 +193,7 @@ test_files:
|
|
190
193
|
- spec/integration/edge_gateway/edge_gateway_spec.rb
|
191
194
|
- spec/spec_helper.rb
|
192
195
|
- spec/support/stub_fog_interface.rb
|
196
|
+
- spec/vcloud/core/edge_gateway_interface_spec.rb
|
193
197
|
- spec/vcloud/core/edge_gateway_spec.rb
|
194
198
|
- spec/vcloud/core/metadata_helper_spec.rb
|
195
199
|
- spec/vcloud/core/org_vdc_network_spec.rb
|