vcloud-core 0.7.0 → 0.8.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.
- data/.gitignore +1 -1
- data/CHANGELOG.md +12 -0
- data/lib/vcloud/core.rb +2 -1
- data/lib/vcloud/core/api_interface.rb +35 -0
- data/lib/vcloud/core/compute_metadata.rb +1 -1
- data/lib/vcloud/core/edge_gateway.rb +2 -2
- data/lib/vcloud/core/fog.rb +40 -0
- data/lib/vcloud/core/fog/fog_constants.rb +35 -0
- data/lib/vcloud/core/fog/login.rb +40 -0
- data/lib/vcloud/core/fog/model_interface.rb +41 -0
- data/lib/vcloud/core/fog/service_interface.rb +253 -0
- data/lib/vcloud/core/login_cli.rb +1 -1
- data/lib/vcloud/core/metadata_helper.rb +1 -1
- data/lib/vcloud/core/org_vdc_network.rb +3 -3
- data/lib/vcloud/core/query_runner.rb +1 -1
- data/lib/vcloud/core/vapp.rb +6 -6
- data/lib/vcloud/core/vapp_template.rb +1 -1
- data/lib/vcloud/core/vdc.rb +1 -1
- data/lib/vcloud/core/version.rb +1 -1
- data/lib/vcloud/core/vm.rb +9 -9
- data/lib/vcloud/fog.rb +2 -39
- data/lib/vcloud/temporary_fog_classes.rb +11 -0
- data/spec/integration/{fog → core/fog}/login_manual.rb +1 -1
- data/spec/integration/{fog → core/fog}/login_spec.rb +13 -9
- data/spec/integration/core/vm_spec.rb +1 -1
- data/spec/support/integration_helper.rb +1 -1
- data/spec/vcloud/core/edge_gateway_spec.rb +1 -1
- data/spec/vcloud/{fog → core/fog}/fog_model_interface_spec.rb +2 -2
- data/spec/vcloud/{fog → core/fog}/login_spec.rb +4 -4
- data/spec/vcloud/core/fog/service_interface_spec.rb +53 -0
- data/spec/vcloud/{fog_spec.rb → core/fog_spec.rb} +2 -2
- data/spec/vcloud/core/login_cli_spec.rb +6 -6
- data/spec/vcloud/core/org_vdc_network_spec.rb +1 -1
- data/spec/vcloud/core/query_runner_spec.rb +1 -1
- data/spec/vcloud/core/vapp_spec.rb +1 -1
- data/spec/vcloud/core/vapp_template_spec.rb +1 -1
- data/spec/vcloud/core/vdc_spec.rb +1 -1
- data/spec/vcloud/core/vm_spec.rb +1 -1
- metadata +22 -21
- data/jenkins_integration_tests.sh +0 -5
- data/lib/vcloud/fog/content_types.rb +0 -18
- data/lib/vcloud/fog/login.rb +0 -38
- data/lib/vcloud/fog/model_interface.rb +0 -33
- data/lib/vcloud/fog/relation.rb +0 -8
- data/lib/vcloud/fog/service_interface.rb +0 -245
- data/spec/vcloud/fog/service_interface_spec.rb +0 -51
@@ -5,7 +5,7 @@ module Vcloud
|
|
5
5
|
def extract_metadata vcloud_metadata_entries
|
6
6
|
metadata = {}
|
7
7
|
vcloud_metadata_entries.each do |entry|
|
8
|
-
next unless entry[:type] == Vcloud::Fog::ContentTypes::METADATA
|
8
|
+
next unless entry[:type] == Vcloud::Core::Fog::ContentTypes::METADATA
|
9
9
|
key = entry[:Key].to_sym
|
10
10
|
val = entry[:TypedValue][:Value]
|
11
11
|
case entry[:TypedValue][:xsi_type]
|
@@ -35,7 +35,7 @@ module Vcloud
|
|
35
35
|
|
36
36
|
begin
|
37
37
|
Vcloud::Core.logger.info("Provisioning new OrgVdcNetwork #{name} in vDC '#{vdc_name}'")
|
38
|
-
attrs = Vcloud::Fog::ServiceInterface.new.post_create_org_vdc_network(vdc.id, name, options)
|
38
|
+
attrs = Vcloud::Core::Fog::ServiceInterface.new.post_create_org_vdc_network(vdc.id, name, options)
|
39
39
|
rescue RuntimeError => e
|
40
40
|
Vcloud::Core.logger.error("Could not provision orgVdcNetwork: #{e.message}")
|
41
41
|
end
|
@@ -46,7 +46,7 @@ module Vcloud
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def vcloud_attributes
|
49
|
-
Vcloud::Fog::ServiceInterface.new.get_network_complete(id)
|
49
|
+
Vcloud::Core::Fog::ServiceInterface.new.get_network_complete(id)
|
50
50
|
end
|
51
51
|
|
52
52
|
def name
|
@@ -58,7 +58,7 @@ module Vcloud
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def delete
|
61
|
-
Vcloud::Fog::ServiceInterface.new.delete_network(id)
|
61
|
+
Vcloud::Core::Fog::ServiceInterface.new.delete_network(id)
|
62
62
|
end
|
63
63
|
|
64
64
|
def self.construct_network_options(config)
|
data/lib/vcloud/core/vapp.rb
CHANGED
@@ -27,7 +27,7 @@ module Vcloud
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def vcloud_attributes
|
30
|
-
Vcloud::Fog::ServiceInterface.new.get_vapp(id)
|
30
|
+
Vcloud::Core::Fog::ServiceInterface.new.get_vapp(id)
|
31
31
|
end
|
32
32
|
|
33
33
|
module STATUS
|
@@ -57,14 +57,14 @@ module Vcloud
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def self.get_by_name_and_vdc_name(name, vdc_name)
|
60
|
-
fog_interface = Vcloud::Fog::ServiceInterface.new
|
60
|
+
fog_interface = Vcloud::Core::Fog::ServiceInterface.new
|
61
61
|
attrs = fog_interface.get_vapp_by_name_and_vdc_name(name, vdc_name)
|
62
62
|
self.new(attrs[:href].split('/').last) if attrs && attrs.key?(:href)
|
63
63
|
end
|
64
64
|
|
65
65
|
def self.instantiate(name, network_names, template_id, vdc_name)
|
66
66
|
Vcloud::Core.logger.info("Instantiating new vApp #{name} in vDC '#{vdc_name}'")
|
67
|
-
fog_interface = Vcloud::Fog::ServiceInterface.new
|
67
|
+
fog_interface = Vcloud::Core::Fog::ServiceInterface.new
|
68
68
|
networks = get_networks(network_names, vdc_name)
|
69
69
|
|
70
70
|
attrs = fog_interface.post_instantiate_vapp_template(
|
@@ -79,14 +79,14 @@ module Vcloud
|
|
79
79
|
def power_on
|
80
80
|
raise "Cannot power on a missing vApp." unless id
|
81
81
|
return true if running?
|
82
|
-
Vcloud::Fog::ServiceInterface.new.power_on_vapp(id)
|
82
|
+
Vcloud::Core::Fog::ServiceInterface.new.power_on_vapp(id)
|
83
83
|
running?
|
84
84
|
end
|
85
85
|
|
86
86
|
private
|
87
87
|
def running?
|
88
88
|
raise "Cannot call running? on a missing vApp." unless id
|
89
|
-
vapp = Vcloud::Fog::ServiceInterface.new.get_vapp(id)
|
89
|
+
vapp = Vcloud::Core::Fog::ServiceInterface.new.get_vapp(id)
|
90
90
|
vapp[:status].to_i == STATUS::RUNNING ? true : false
|
91
91
|
end
|
92
92
|
|
@@ -110,7 +110,7 @@ module Vcloud
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def self.get_networks(network_names, vdc_name)
|
113
|
-
fsi = Vcloud::Fog::ServiceInterface.new
|
113
|
+
fsi = Vcloud::Core::Fog::ServiceInterface.new
|
114
114
|
fsi.find_networks(network_names, vdc_name) if network_names
|
115
115
|
end
|
116
116
|
end
|
data/lib/vcloud/core/vdc.rb
CHANGED
data/lib/vcloud/core/version.rb
CHANGED
data/lib/vcloud/core/vm.rb
CHANGED
@@ -14,14 +14,14 @@ module Vcloud
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def vcloud_attributes
|
17
|
-
Vcloud::Fog::ServiceInterface.new.get_vapp(id)
|
17
|
+
Vcloud::Core::Fog::ServiceInterface.new.get_vapp(id)
|
18
18
|
end
|
19
19
|
|
20
20
|
def update_memory_size_in_mb(new_memory)
|
21
21
|
return if new_memory.nil?
|
22
22
|
return if new_memory.to_i < 64
|
23
23
|
unless memory.to_i == new_memory.to_i
|
24
|
-
Vcloud::Fog::ServiceInterface.new.put_memory(id, new_memory)
|
24
|
+
Vcloud::Core::Fog::ServiceInterface.new.put_memory(id, new_memory)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -44,7 +44,7 @@ module Vcloud
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def update_name(new_name)
|
47
|
-
fsi = Vcloud::Fog::ServiceInterface.new
|
47
|
+
fsi = Vcloud::Core::Fog::ServiceInterface.new
|
48
48
|
fsi.put_vm(id, new_name) unless name == new_name
|
49
49
|
end
|
50
50
|
|
@@ -56,13 +56,13 @@ module Vcloud
|
|
56
56
|
return if new_cpu_count.nil?
|
57
57
|
return if new_cpu_count.to_i == 0
|
58
58
|
unless cpu.to_i == new_cpu_count.to_i
|
59
|
-
Vcloud::Fog::ServiceInterface.new.put_cpu(id, new_cpu_count)
|
59
|
+
Vcloud::Core::Fog::ServiceInterface.new.put_cpu(id, new_cpu_count)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
63
|
def update_metadata(metadata)
|
64
64
|
return if metadata.nil?
|
65
|
-
fsi = Vcloud::Fog::ServiceInterface.new
|
65
|
+
fsi = Vcloud::Core::Fog::ServiceInterface.new
|
66
66
|
metadata.each do |k, v|
|
67
67
|
fsi.put_vapp_metadata_value(@vapp.id, k, v)
|
68
68
|
fsi.put_vapp_metadata_value(id, k, v)
|
@@ -70,7 +70,7 @@ module Vcloud
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def add_extra_disks(extra_disks)
|
73
|
-
vm = Vcloud::Fog::ModelInterface.new.get_vm_by_href(href)
|
73
|
+
vm = Vcloud::Core::Fog::ModelInterface.new.get_vm_by_href(href)
|
74
74
|
if extra_disks
|
75
75
|
extra_disks.each do |extra_disk|
|
76
76
|
Vcloud::Core.logger.debug("adding a disk of size #{extra_disk[:size]}MB into VM #{id}")
|
@@ -99,16 +99,16 @@ module Vcloud
|
|
99
99
|
connection[:IpAddress] = ip_address if ip_address
|
100
100
|
connection
|
101
101
|
end
|
102
|
-
Vcloud::Fog::ServiceInterface.new.put_network_connection_system_section_vapp(id, section)
|
102
|
+
Vcloud::Core::Fog::ServiceInterface.new.put_network_connection_system_section_vapp(id, section)
|
103
103
|
end
|
104
104
|
|
105
105
|
def configure_guest_customization_section(preamble)
|
106
|
-
Vcloud::Fog::ServiceInterface.new.put_guest_customization_section(id, vapp_name, preamble)
|
106
|
+
Vcloud::Core::Fog::ServiceInterface.new.put_guest_customization_section(id, vapp_name, preamble)
|
107
107
|
end
|
108
108
|
|
109
109
|
def update_storage_profile storage_profile
|
110
110
|
storage_profile_href = get_storage_profile_href_by_name(storage_profile, @vapp.name)
|
111
|
-
Vcloud::Fog::ServiceInterface.new.put_vm(id, name, {
|
111
|
+
Vcloud::Core::Fog::ServiceInterface.new.put_vm(id, name, {
|
112
112
|
:StorageProfile => {
|
113
113
|
name: storage_profile,
|
114
114
|
href: storage_profile_href
|
data/lib/vcloud/fog.rb
CHANGED
@@ -1,39 +1,2 @@
|
|
1
|
-
require 'fog'
|
2
|
-
require 'vcloud/
|
3
|
-
require 'vcloud/fog/login'
|
4
|
-
require 'vcloud/fog/relation'
|
5
|
-
require 'vcloud/fog/service_interface'
|
6
|
-
require 'vcloud/fog/model_interface'
|
7
|
-
|
8
|
-
module Vcloud
|
9
|
-
module Fog
|
10
|
-
TOKEN_ENV_VAR_NAME = 'FOG_VCLOUD_TOKEN'
|
11
|
-
FOG_CREDS_PASS_NAME = :vcloud_director_password
|
12
|
-
|
13
|
-
def self.check_credentials
|
14
|
-
pass = fog_credentials_pass
|
15
|
-
unless pass.nil? or pass.empty?
|
16
|
-
warn <<EOF
|
17
|
-
[WARNING] Storing :vcloud_director_password in your plaintext FOG_RC file is
|
18
|
-
insecure. Future releases of vcloud-core (and tools that depend on
|
19
|
-
it) will prevent you from doing this. Please use vcloud-login to
|
20
|
-
get a session token instead.
|
21
|
-
EOF
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.fog_credentials_pass
|
26
|
-
begin
|
27
|
-
pass = ::Fog.credentials[FOG_CREDS_PASS_NAME]
|
28
|
-
rescue ::Fog::Errors::LoadError
|
29
|
-
# Assume no password if Fog has been unable to load creds.
|
30
|
-
# Suppresses a noisy error about missing credentials.
|
31
|
-
pass = nil
|
32
|
-
end
|
33
|
-
|
34
|
-
pass
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
Vcloud::Fog.check_credentials
|
1
|
+
require 'vcloud/core/fog'
|
2
|
+
require 'vcloud/temporary_fog_classes'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Vcloud
|
2
|
+
module Fog
|
3
|
+
|
4
|
+
# FIXME: This is required because vCloud Core has a dependency
|
5
|
+
# on vCloud Tools Tester. Once vCloud Tools Tester has been
|
6
|
+
# updated to use the correct class, this can be removed.
|
7
|
+
class ModelInterface < Vcloud::Core::Fog::ModelInterface
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
@@ -6,7 +6,7 @@ require 'spec_helper'
|
|
6
6
|
# of our tests should fail if the behaviour of Fog changes. However these
|
7
7
|
# may came in useful when debugging such a scenario.
|
8
8
|
|
9
|
-
describe Vcloud::Fog::Login do
|
9
|
+
describe Vcloud::Core::Fog::Login do
|
10
10
|
let!(:mock_env) { ENV.clone }
|
11
11
|
|
12
12
|
before(:each) do
|
@@ -1,26 +1,30 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Vcloud::Fog::Login do
|
4
|
-
let!(:mock_env) { ENV.clone }
|
5
|
-
|
3
|
+
describe Vcloud::Core::Fog::Login do
|
6
4
|
before(:each) do
|
7
|
-
stub_const('ENV',
|
5
|
+
stub_const('ENV', {})
|
6
|
+
|
7
|
+
@orig_credential = ::Fog.credential
|
8
|
+
::Fog.credential = 'null'
|
9
|
+
@orig_credentials_path = ::Fog.credentials_path
|
10
|
+
::Fog.credentials_path = '/dev/null'
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:each) do
|
14
|
+
::Fog.credential = @orig_credential
|
15
|
+
::Fog.credentials_path = @orig_credentials_path
|
8
16
|
end
|
9
17
|
|
10
18
|
describe "#token" do
|
11
19
|
context "unable to load credentials" do
|
12
20
|
it "should raise an exception succinctly listing the missing credentials" do
|
13
|
-
mock_env.clear
|
14
|
-
::Fog.credential = 'null'
|
15
|
-
::Fog.credentials_path = '/dev/null'
|
16
|
-
|
17
21
|
# This test is known to fail with a TypeError due to a bug in Ruby 1.9.3 that
|
18
22
|
# has since been fixed. See https://github.com/gds-operations/vcloud-core/pull/100
|
19
23
|
expect { ::Fog.credentials['doesnotexist'] }.to raise_error(
|
20
24
|
Fog::Errors::LoadError,
|
21
25
|
/^Missing Credentials\n/
|
22
26
|
)
|
23
|
-
expect { subject.token(
|
27
|
+
expect { subject.token('supersekret') }.to raise_error(
|
24
28
|
ArgumentError,
|
25
29
|
/^Missing required arguments: vcloud_director_.*$/
|
26
30
|
)
|
@@ -147,7 +147,7 @@ describe Vcloud::Core::Vm do
|
|
147
147
|
context "#add_extra_disks" do
|
148
148
|
|
149
149
|
before(:all) do
|
150
|
-
@fog_model_vm = Vcloud::Fog::ModelInterface.new.get_vm_by_href(@vm.href)
|
150
|
+
@fog_model_vm = Vcloud::Core::Fog::ModelInterface.new.get_vm_by_href(@vm.href)
|
151
151
|
@initial_vm_disks = get_vm_hard_disks(@fog_model_vm)
|
152
152
|
end
|
153
153
|
|
@@ -23,7 +23,7 @@ module IntegrationHelper
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.delete_vapps(vapp_list)
|
26
|
-
fsi = Vcloud::Fog::ServiceInterface.new()
|
26
|
+
fsi = Vcloud::Core::Fog::ServiceInterface.new()
|
27
27
|
vapp_list.each do |vapp|
|
28
28
|
if Integer(vapp.vcloud_attributes[:status]) == Vcloud::Core::Vapp::STATUS::RUNNING
|
29
29
|
fsi.post_undeploy_vapp(vapp.id)
|
@@ -7,7 +7,7 @@ module Vcloud
|
|
7
7
|
before(:each) do
|
8
8
|
@edgegw_id = '12345678-1234-1234-1234-000000111454'
|
9
9
|
@mock_fog_interface = StubFogInterface.new
|
10
|
-
allow(Vcloud::Fog::ServiceInterface).to receive(:new).and_return(@mock_fog_interface)
|
10
|
+
allow(Vcloud::Core::Fog::ServiceInterface).to receive(:new).and_return(@mock_fog_interface)
|
11
11
|
end
|
12
12
|
|
13
13
|
context "Class public interface" do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Vcloud::Fog::ModelInterface do
|
3
|
+
describe Vcloud::Core::Fog::ModelInterface do
|
4
4
|
|
5
5
|
it "should retrive logged in organization" do
|
6
6
|
vm_href, vdc_href = 'https://vmware.net/vapp/vm-1', 'vdc/vdc-1'
|
@@ -20,6 +20,6 @@ describe Vcloud::Fog::ModelInterface do
|
|
20
20
|
)
|
21
21
|
expect(Fog::Compute::VcloudDirector).to receive(:new).and_return(vcloud)
|
22
22
|
|
23
|
-
expect(Vcloud::Fog::ModelInterface.new.get_vm_by_href(vm_href)).to eq(vm)
|
23
|
+
expect(Vcloud::Core::Fog::ModelInterface.new.get_vm_by_href(vm_href)).to eq(vm)
|
24
24
|
end
|
25
25
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'stringio'
|
3
3
|
|
4
|
-
describe Vcloud::Fog::Login do
|
4
|
+
describe Vcloud::Core::Fog::Login do
|
5
5
|
describe "#token" do
|
6
6
|
it "should return the output from get_token" do
|
7
7
|
expect(subject).to receive(:check_plaintext_pass)
|
@@ -20,7 +20,7 @@ describe Vcloud::Fog::Login do
|
|
20
20
|
describe "#check_plaintext_pass" do
|
21
21
|
context "vcloud_director_password not set" do
|
22
22
|
it "should not raise an exception" do
|
23
|
-
expect(Vcloud::Fog).to receive(:fog_credentials_pass).and_return(nil)
|
23
|
+
expect(Vcloud::Core::Fog).to receive(:fog_credentials_pass).and_return(nil)
|
24
24
|
expect(subject).to receive(:get_token)
|
25
25
|
expect { subject.token('supersekret') }.not_to raise_error
|
26
26
|
end
|
@@ -28,7 +28,7 @@ describe Vcloud::Fog::Login do
|
|
28
28
|
|
29
29
|
context "vcloud_director_password empty string" do
|
30
30
|
it "should not raise an exception" do
|
31
|
-
expect(Vcloud::Fog).to receive(:fog_credentials_pass).and_return('')
|
31
|
+
expect(Vcloud::Core::Fog).to receive(:fog_credentials_pass).and_return('')
|
32
32
|
expect(subject).to receive(:get_token)
|
33
33
|
expect { subject.token('supersekret') }.not_to raise_error
|
34
34
|
end
|
@@ -36,7 +36,7 @@ describe Vcloud::Fog::Login do
|
|
36
36
|
|
37
37
|
context "vcloud_director_password non-empty string" do
|
38
38
|
it "should raise an exception" do
|
39
|
-
expect(Vcloud::Fog).to receive(:fog_credentials_pass).and_return('supersekret')
|
39
|
+
expect(Vcloud::Core::Fog).to receive(:fog_credentials_pass).and_return('supersekret')
|
40
40
|
expect(subject).to_not receive(:get_token)
|
41
41
|
expect { subject.token('supersekret') }.to raise_error(
|
42
42
|
RuntimeError,
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Vcloud
|
4
|
+
module Core
|
5
|
+
module Fog
|
6
|
+
describe ServiceInterface do
|
7
|
+
|
8
|
+
FOG_SESSION_RESPONSE = {:xmlns => 'http://www.vmware.com/vcloud/v5.1', :xmlns_xsi => 'http://www.w3.org/2001/XMLSchema-instance', :user => 'me@dexample.com', :org => 'my_org', :type => 'application/vnd.vmware.vcloud.session+xml', :href => 'https://example.org/api/session/', :xsi_schemaLocation => 'http://www.vmware.com/vcloud/v5.1 http://example.org/api/v5.1/schema/master.xsd', :Link => [{:rel => 'down', :type => 'application/vnd.vmware.vcloud.orgList+xml', :href => 'https://example.com/api/org/'}, {:rel => 'down', :type => 'application/vnd.vmware.admin.vcloud+xml', :href => 'https://example.com/api/admin/'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.org+xml', :name => 'vdc_name', :href => 'https://example.com/api/org/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.query.queryList+xml', :href => 'https://example.com/api/query'}, {:rel => 'entityResolver', :type => 'application/vnd.vmware.vcloud.entity+xml', :href => 'https://example.com/api/entity/'}, {:rel => 'down:extensibility', :type => 'application/vnd.vmware.vcloud.apiextensibility+xml', :href => 'https://example.com/api/extensibility'}]}
|
9
|
+
FOG_ORGANIZATION_RESPONSE = {:xmlns => 'http://www.vmware.com/vcloud/v5.1', :xmlns_xsi => 'http://www.w3.org/2001/XMLSchema-instance', :name => 'org_name', :id => 'urn:vcloud:org:0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0', :type => 'application/vnd.vmware.vcloud.org+xml', :href => 'https://example.com/api/org/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0', :xsi_schemaLocation => 'http://www.vmware.com/vcloud/v1.5 http://example.com/api/v1.5/schema/master.xsd', :Link => [{:rel => 'down', :type => 'application/vnd.vmware.vcloud.vdc+xml', :name => 'vdc_name', :href => 'https://example.com/api/vdc/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.tasksList+xml', :href => 'https://example.com/api/tasksList/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.catalog+xml', :name => 'Appliances', :href => 'https://example.com/api/catalog/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.controlAccess+xml', :href => 'https://example.com/api/org/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0X/catalog/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0/controlAccess/'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.catalog+xml', :name => 'Public Catalog', :href => 'https://example.com/api/catalog/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.controlAccess+xml', :href => 'https://example.com/api/org/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0/catalog/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0/controlAccess/'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.catalog+xml', :name => 'walker-ci', :href => 'https://example.com/api/catalog/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.controlAccess+xml', :href => 'https://example.com/api/org/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0/catalog/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0/controlAccess/'}, {:rel => 'controlAccess', :type => 'application/vnd.vmware.vcloud.controlAccess+xml', :href => 'https://example.com/api/org/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0/catalog/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0/action/controlAccess'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.catalog+xml', :name => 'Images', :href => 'https://example.com/api/catalog/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.controlAccess+xml', :href => 'https://example.com/api/org/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0/catalog/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0/controlAccess/'}, {:rel => 'add', :type => 'application/vnd.vmware.admin.catalog+xml', :href => 'https://example.com/api/admin/org/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0/catalogs'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.orgNetwork+xml', :name => 'walker-ci-network', :href => 'https://example.com/api/network/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.orgNetwork+xml', :name => 'backend', :href => 'https://example.com/api/network/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.supportedSystemsInfo+xml', :href => 'https://example.com/api/supportedSystemsInfo/'}, {:rel => 'down', :type => 'application/vnd.vmware.vcloud.metadata+xml', :href => 'https://example.com/api/org/0a0a0a0-0a0a0-0a0a-0a0a-0a0a0a0a0a0/metadata'}], :Description => 'Added description', :FullName => 'GDS CI Tools', :Tasks => {:Task => []}}
|
10
|
+
|
11
|
+
it 'should raise a exception if named vdc not found in the data returned' do
|
12
|
+
|
13
|
+
fog_facade = double(:FogFacade)
|
14
|
+
expect(fog_facade).to receive(:session) { FOG_SESSION_RESPONSE }
|
15
|
+
expect(fog_facade).to receive(:get_organization) { FOG_ORGANIZATION_RESPONSE }
|
16
|
+
|
17
|
+
service_interface = ServiceInterface.new(fog_facade)
|
18
|
+
|
19
|
+
expect { service_interface.vdc('DoesNotExist') }.to raise_exception(RuntimeError, 'vdc DoesNotExist cannot be found')
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'configure edge gateway' do
|
23
|
+
before(:each) do
|
24
|
+
@config = { :Blah => 'TestData' }
|
25
|
+
@vcloud = double(:vcloud)
|
26
|
+
expect(::Fog::Compute::VcloudDirector).to receive(:new).and_return(@vcloud)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should configure firewall for given edge gateway id" do
|
30
|
+
task = double(:task)
|
31
|
+
expect(Vcloud::Core::logger).to receive(:info).with("Updating EdgeGateway 1234")
|
32
|
+
expect(@vcloud).to receive(:post_configure_edge_gateway_services).with("1234", @config).
|
33
|
+
and_return(double(:response, :body => task ))
|
34
|
+
expect(@vcloud).to receive(:process_task).with(task)
|
35
|
+
|
36
|
+
ServiceInterface.new.post_configure_edge_gateway_services "1234", @config
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
it "should log and return exceptions without swallowing" do
|
41
|
+
expect(Vcloud::Core::logger).to receive(:info).with("Updating EdgeGateway 1234")
|
42
|
+
runtime_error = RuntimeError.new('Test Error')
|
43
|
+
expect(Vcloud::Core::logger).to receive(:error).with("Could not update EdgeGateway 1234 : #{runtime_error}")
|
44
|
+
expect(@vcloud).to receive(:post_configure_edge_gateway_services).with("1234", @config).
|
45
|
+
and_raise(runtime_error)
|
46
|
+
expect{ ServiceInterface.new.post_configure_edge_gateway_services("1234", @config) }.to raise_error("Test Error")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|