vcloud-edge_gateway 0.0.2 → 0.1.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.
Files changed (31) hide show
  1. data/CHANGELOG.md +11 -0
  2. data/jenkins_integration_tests.sh +8 -0
  3. data/lib/vcloud/edge_gateway/configuration_generator/load_balancer_service.rb +1 -7
  4. data/lib/vcloud/edge_gateway/configuration_generator/nat_service.rb +16 -6
  5. data/lib/vcloud/edge_gateway/edge_gateway_configuration.rb +34 -9
  6. data/lib/vcloud/edge_gateway/load_balancer_configuration_differ.rb +28 -0
  7. data/lib/vcloud/edge_gateway/version.rb +1 -1
  8. data/lib/vcloud/edge_gateway.rb +1 -0
  9. data/lib/vcloud/edge_gateway_services.rb +9 -4
  10. data/lib/vcloud/schema/edge_gateway.rb +2 -1
  11. data/lib/vcloud/schema/load_balancer_service.rb +3 -2
  12. data/spec/erb_helper.rb +1 -1
  13. data/spec/integration/edge_gateway/data/load_balancer_config.yaml.erb +24 -0
  14. data/spec/integration/edge_gateway/data/load_balancer_empty.yaml.erb +4 -0
  15. data/spec/integration/edge_gateway/data/load_balancer_single_pool.yaml.erb +15 -0
  16. data/spec/integration/edge_gateway/data/load_balancer_single_virtual_server_invalid_pool.yaml.erb +13 -0
  17. data/spec/integration/edge_gateway/data/load_balancer_single_virtual_server_missing_pool.yaml.erb +12 -0
  18. data/spec/integration/edge_gateway/data/nat_and_firewall_plus_load_balancer_config.yaml.erb +54 -0
  19. data/spec/integration/edge_gateway/edge_gateway_services_spec.rb +52 -23
  20. data/spec/integration/edge_gateway/load_balancer_service_spec.rb +204 -0
  21. data/spec/integration/edge_gateway/nat_service_spec.rb +7 -2
  22. data/spec/vcloud/edge_gateway/configuration_generator/data/load_balancer_http-output.yaml +2 -2
  23. data/spec/vcloud/edge_gateway/configuration_generator/data/load_balancer_https-output.yaml +2 -0
  24. data/spec/vcloud/edge_gateway/configuration_generator/data/load_balancer_mixed_complex-output.yaml +1 -0
  25. data/spec/vcloud/edge_gateway/configuration_generator/load_balancer_service_spec.rb +2 -0
  26. data/spec/vcloud/edge_gateway/configuration_generator/nat_service_spec.rb +198 -94
  27. data/spec/vcloud/edge_gateway/edge_gateway_configuration_spec.rb +1043 -88
  28. data/spec/vcloud/edge_gateway/load_balancer_configuration_differ_spec.rb +160 -0
  29. data/spec/vcloud/edge_gateway/load_balancer_schema_validation_spec.rb +4 -6
  30. data/vcloud-edge_gateway.gemspec +1 -1
  31. metadata +24 -5
data/CHANGELOG.md ADDED
@@ -0,0 +1,11 @@
1
+ ## 0.1.0 (2014-02-20)
2
+
3
+ Features:
4
+
5
+ - Add LoadBalancerService configuration management
6
+
7
+ ## 0.0.2 (2014-02-14)
8
+
9
+ - First release of gem
10
+ - Supports configuration of Firewall Service and Nat Service
11
+
@@ -0,0 +1,8 @@
1
+ #!/bin/bash -x
2
+ set -e
3
+ bundle install --path "${HOME}/bundles/${JOB_NAME}"
4
+
5
+ ./scripts/generate_fog_conf_file.sh
6
+ export FOG_RC=fog_integration_test.config
7
+ bundle exec rake integration
8
+ rm fog_integration_test.config
@@ -197,13 +197,7 @@ module Vcloud
197
197
  vcloud_pool_healthcheck_entry = {
198
198
  Mode: default_mode,
199
199
  }
200
- if protocol == :http
201
- vcloud_pool_healthcheck_entry[:Uri] = ''
202
- elsif ( protocol == :https ) &&
203
- input_pool_healthcheck_entry &&
204
- ( input_pool_healthcheck_entry[:protocol] == 'TCP' )
205
- vcloud_pool_healthcheck_entry[:Uri] = ''
206
- end
200
+ vcloud_pool_healthcheck_entry[:Uri] = ''
207
201
  vcloud_pool_healthcheck_entry[:HealthThreshold] = '2'
208
202
  vcloud_pool_healthcheck_entry[:UnhealthThreshold] = '3'
209
203
  vcloud_pool_healthcheck_entry[:Interval] = '5'
@@ -3,10 +3,9 @@ module Vcloud
3
3
  module ConfigurationGenerator
4
4
 
5
5
  class NatService
6
- def initialize edge_gateway, input_config
7
- @edge_gateway = Vcloud::Core::EdgeGateway.get_by_name(edge_gateway)
6
+ def initialize input_config, edge_gateway_interfaces
8
7
  @input_config = input_config
9
- @interfaces_by_id = {}
8
+ @edge_gateway_interfaces = edge_gateway_interfaces
10
9
  end
11
10
 
12
11
  def generate_fog_config
@@ -35,9 +34,12 @@ module Vcloud
35
34
 
36
35
  def populate_gateway_nat_rule(rule)
37
36
  raise "Must supply a :network_id parameter" unless net_id = rule[:network_id]
38
- @interfaces_by_id[net_id] ||= @edge_gateway.vcloud_gateway_interface_by_id(net_id)
39
- raise "unable to find gateway network interface with id #{net_id}" unless @interfaces_by_id[net_id]
40
- gateway_nat_rule = {:Interface => @interfaces_by_id[net_id][:Network]}
37
+ edge_gw_interface = @edge_gateway_interfaces.find do |interface|
38
+ interface.network_id == net_id
39
+ end
40
+ raise "unable to find gateway network interface with id #{net_id}" unless edge_gw_interface
41
+ gateway_nat_rule = {}
42
+ gateway_nat_rule[:Interface] = populate_nat_interface(edge_gw_interface)
41
43
  gateway_nat_rule[:OriginalIp] = rule[:original_ip]
42
44
  gateway_nat_rule[:TranslatedIp] = rule[:translated_ip]
43
45
  gateway_nat_rule[:OriginalPort] = rule[:original_port] if rule.key?(:original_port)
@@ -48,6 +50,14 @@ module Vcloud
48
50
  gateway_nat_rule
49
51
  end
50
52
 
53
+ def populate_nat_interface(edge_interface)
54
+ vcloud_interface = {}
55
+ vcloud_interface[:type] = 'application/vnd.vmware.admin.network+xml'
56
+ vcloud_interface[:name] = edge_interface.network_name
57
+ vcloud_interface[:href] = edge_interface.network_href
58
+ vcloud_interface
59
+ end
60
+
51
61
  end
52
62
  end
53
63
  end
@@ -2,37 +2,62 @@ module Vcloud
2
2
  module EdgeGateway
3
3
  class EdgeGatewayConfiguration
4
4
 
5
- def initialize(local_config)
5
+ def initialize(local_config, remote_config, edge_gateway_interfaces)
6
6
  @local_config = local_config
7
+ @remote_config = remote_config
8
+ @edge_gateway_interfaces = edge_gateway_interfaces
7
9
  @config = { }
10
+ @update_required = nil
8
11
  end
9
12
 
10
- def update_required?(remote_config)
11
- update_required = false
13
+ def update_required?
14
+ @update_required = false
12
15
 
13
16
  firewall_service_config = EdgeGateway::ConfigurationGenerator::FirewallService.new.generate_fog_config(@local_config[:firewall_service])
14
17
  unless firewall_service_config.nil?
15
- differ = EdgeGateway::ConfigurationDiffer.new(firewall_service_config, remote_config[:FirewallService])
18
+ differ = EdgeGateway::ConfigurationDiffer.new(firewall_service_config, @remote_config[:FirewallService])
16
19
  unless differ.diff.empty?
17
20
  @config[:FirewallService] = firewall_service_config
18
- update_required = true
21
+ @update_required = true
19
22
  end
20
23
  end
21
24
 
22
- nat_service_config = EdgeGateway::ConfigurationGenerator::NatService.new(@local_config[:gateway], @local_config[:nat_service]).generate_fog_config
25
+ nat_service_config = EdgeGateway::ConfigurationGenerator::NatService.new(
26
+ @local_config[:nat_service],
27
+ @edge_gateway_interfaces
28
+ ).generate_fog_config
23
29
 
24
30
  unless nat_service_config.nil?
25
- differ = EdgeGateway::ConfigurationDiffer.new(nat_service_config, remote_config[:NatService])
31
+ differ = EdgeGateway::ConfigurationDiffer.new(nat_service_config, @remote_config[:NatService])
26
32
  unless differ.diff.empty?
27
33
  @config[:NatService] = nat_service_config
28
- update_required = true
34
+ @update_required = true
29
35
  end
30
36
  end
31
37
 
32
- update_required
38
+ load_balancer_service_config =
39
+ EdgeGateway::ConfigurationGenerator::LoadBalancerService.new(
40
+ @local_config[:gateway]
41
+ ).generate_fog_config(@local_config[:load_balancer_service])
42
+
43
+ unless load_balancer_service_config.nil?
44
+ differ = EdgeGateway::LoadBalancerConfigurationDiffer.new(
45
+ load_balancer_service_config,
46
+ @remote_config[:LoadBalancerService]
47
+ )
48
+ unless differ.diff.empty?
49
+ @config[:LoadBalancerService] = load_balancer_service_config
50
+ @update_required = true
51
+ end
52
+ end
53
+
54
+ @update_required
33
55
  end
34
56
 
35
57
  def config
58
+ if @update_required.nil?
59
+ update_required?
60
+ end
36
61
  @config
37
62
  end
38
63
 
@@ -0,0 +1,28 @@
1
+ module Vcloud
2
+ module EdgeGateway
3
+ class LoadBalancerConfigurationDiffer
4
+
5
+ def initialize local, remote
6
+ @local = local
7
+ @remote = remote
8
+ end
9
+
10
+ def diff
11
+ ( @local == stripped_remote_config ) ? [] : HashDiff.diff(@local, stripped_remote_config)
12
+ end
13
+
14
+ def stripped_remote_config
15
+ return nil if @remote.nil?
16
+ deep_cloned_remote_config = Marshal.load( Marshal.dump(@remote) )
17
+ if deep_cloned_remote_config.key?(:Pool)
18
+ deep_cloned_remote_config[:Pool].each do |pool_entry|
19
+ pool_entry.delete(:Operational)
20
+ end
21
+ end
22
+ deep_cloned_remote_config
23
+ end
24
+
25
+ end
26
+ end
27
+
28
+ end
@@ -1,6 +1,6 @@
1
1
  module Vcloud
2
2
  module EdgeGateway
3
- VERSION = '0.0.2'
3
+ VERSION = '0.1.0'
4
4
  end
5
5
  end
6
6
 
@@ -18,6 +18,7 @@ require 'vcloud/edge_gateway/configuration_generator/firewall_service'
18
18
  require 'vcloud/edge_gateway/configuration_generator/nat_service'
19
19
  require 'vcloud/edge_gateway/configuration_generator/load_balancer_service'
20
20
  require 'vcloud/edge_gateway/configuration_differ'
21
+ require 'vcloud/edge_gateway/load_balancer_configuration_differ'
21
22
  require 'vcloud/edge_gateway/edge_gateway_configuration'
22
23
 
23
24
 
@@ -8,14 +8,19 @@ module Vcloud
8
8
  end
9
9
 
10
10
  def update(config_file = nil)
11
- config = @config_loader.load_config(config_file, Vcloud::Schema::EDGE_GATEWAY_SERVICES)
11
+ local_config = @config_loader.load_config(config_file, Vcloud::Schema::EDGE_GATEWAY_SERVICES)
12
12
 
13
- edge_gateway = Core::EdgeGateway.get_by_name config[:gateway]
13
+ edge_gateway = Core::EdgeGateway.get_by_name local_config[:gateway]
14
14
  remote_config = edge_gateway.vcloud_attributes[:Configuration][:EdgeGatewayServiceConfiguration]
15
+ edge_gateway_interface_list = edge_gateway.interfaces
15
16
 
16
- proposed_config = EdgeGateway::EdgeGatewayConfiguration.new(config)
17
+ proposed_config = EdgeGateway::EdgeGatewayConfiguration.new(
18
+ local_config,
19
+ remote_config,
20
+ edge_gateway_interface_list
21
+ )
17
22
 
18
- if proposed_config.update_required?(remote_config)
23
+ if proposed_config.update_required?
19
24
  edge_gateway.update_configuration proposed_config.config
20
25
  else
21
26
  Vcloud::EdgeGateway.logger.info("EdgeGatewayServices.update: Configuration is already up to date. Skipping.")
@@ -7,7 +7,8 @@ module Vcloud
7
7
  internals: {
8
8
  gateway: { type: 'string' },
9
9
  firewall_service: FIREWALL_SERVICE,
10
- nat_service: NAT_SERVICE
10
+ nat_service: NAT_SERVICE,
11
+ load_balancer_service: LOAD_BALANCER_SERVICE,
11
12
  }
12
13
  }
13
14
 
@@ -109,17 +109,18 @@ module Vcloud
109
109
  LOAD_BALANCER_SERVICE = {
110
110
  type: Hash,
111
111
  allowed_empty: true,
112
+ required: false,
112
113
  internals: {
113
114
  enabled: { type: 'boolean', required: false },
114
115
  pools: {
115
116
  type: Array,
116
- required: true,
117
+ required: false,
117
118
  allowed_empty: true,
118
119
  each_element_is: LOAD_BALANCER_POOL_ENTRY,
119
120
  },
120
121
  virtual_servers: {
121
122
  type: Array,
122
- required: true,
123
+ required: false,
123
124
  allowed_empty: true,
124
125
  each_element_is: LOAD_BALANCER_VIRTUAL_SERVER_ENTRY,
125
126
  },
data/spec/erb_helper.rb CHANGED
@@ -2,7 +2,7 @@ class ErbHelper
2
2
  def self.convert_erb_template_to_yaml test_namespace, input_erb_config
3
3
  input_erb_config = input_erb_config
4
4
  e = ERB.new(File.open(input_erb_config).read)
5
- output_yaml_config = File.join(File.dirname(input_erb_config), "output_#{Time.now.strftime('%s')}.yaml")
5
+ output_yaml_config = File.join(File.dirname(input_erb_config), "output_#{Time.now.strftime('%s.%6N')}.yaml")
6
6
  File.open(output_yaml_config, 'w') { |f|
7
7
  f.write e.result(OpenStruct.new(test_namespace).instance_eval { binding })
8
8
  }
@@ -0,0 +1,24 @@
1
+ ---
2
+ gateway: <%= edge_gateway_name %>
3
+ load_balancer_service:
4
+ enabled: true
5
+ pools:
6
+ - name: 'integration-test-pool-1'
7
+ description: 'A pool'
8
+ service:
9
+ http:
10
+ enabled: true
11
+ port: 8080
12
+ algorithm: 'ROUND_ROBIN'
13
+ members:
14
+ - ip_address: 192.0.2.55
15
+ - ip_address: 192.0.2.56
16
+ virtual_servers:
17
+ - name: 'integration-test-vs-1'
18
+ description: 'A virtual server'
19
+ ip_address: <%= edge_gateway_ext_network_ip %>
20
+ network: <%= edge_gateway_ext_network_id %>
21
+ pool: 'integration-test-pool-1'
22
+ service_profiles:
23
+ http:
24
+ port: 8080
@@ -0,0 +1,4 @@
1
+ ---
2
+ gateway: <%= edge_gateway_name %>
3
+ load_balancer_service:
4
+ enabled: true
@@ -0,0 +1,15 @@
1
+ ---
2
+ gateway: <%= edge_gateway_name %>
3
+ load_balancer_service:
4
+ enabled: true
5
+ pools:
6
+ - name: 'integration-test-pool-1'
7
+ description: 'A pool'
8
+ service:
9
+ http:
10
+ enabled: true
11
+ port: 8080
12
+ algorithm: 'ROUND_ROBIN'
13
+ members:
14
+ - ip_address: 192.0.2.55
15
+ - ip_address: 192.0.2.56
@@ -0,0 +1,13 @@
1
+ ---
2
+ gateway: <%= edge_gateway_name %>
3
+ load_balancer_service:
4
+ enabled: true
5
+ virtual_servers:
6
+ - name: 'integration-test-vs-1'
7
+ description: 'A virtual server'
8
+ ip_address: <%= edge_gateway_ext_network_ip %>
9
+ network: <%= edge_gateway_ext_network_id %>
10
+ pool: 'unconfigured-test-pool-1'
11
+ service_profiles:
12
+ http:
13
+ port: 8080
@@ -0,0 +1,12 @@
1
+ ---
2
+ gateway: <%= edge_gateway_name %>
3
+ load_balancer_service:
4
+ enabled: true
5
+ virtual_servers:
6
+ - name: 'integration-test-vs-1'
7
+ description: 'A virtual server'
8
+ ip_address: <%= edge_gateway_ext_network_ip %>
9
+ network: <%= edge_gateway_ext_network_id %>
10
+ service_profiles:
11
+ http:
12
+ port: 8080
@@ -0,0 +1,54 @@
1
+ ---
2
+ gateway: <%= edge_gateway_name %>
3
+ nat_service:
4
+ nat_rules:
5
+ - enabled: true
6
+ network_id: <%= network_id %>
7
+ rule_type: 'DNAT'
8
+ translated_ip: '10.10.1.2-10.10.1.3'
9
+ translated_port: '3412'
10
+ original_ip: <%= original_ip %>
11
+ original_port: '3412'
12
+ protocol: 'tcp'
13
+ - enabled: true
14
+ network_id: <%= network_id %>
15
+ rule_type: 'SNAT'
16
+ translated_ip: <%= original_ip %>
17
+ original_ip: '10.10.1.2-10.10.1.3'
18
+ firewall_service:
19
+ policy: drop
20
+ log_default_action: true
21
+ firewall_rules:
22
+ - enabled: true
23
+ description: 'A rule'
24
+ policy: allow
25
+ protocols: 'tcp'
26
+ destination_port_range: Any
27
+ destination_ip: 10.10.1.2
28
+ source_port_range: Any
29
+ source_ip: 192.0.2.2
30
+ - enabled: true
31
+ destination_ip: '10.10.1.3-10.10.1.5'
32
+ source_ip: 192.0.2.2/24
33
+ load_balancer_service:
34
+ enabled: true
35
+ pools:
36
+ - name: 'integration-test-pool-1'
37
+ description: 'A pool'
38
+ service:
39
+ http:
40
+ enabled: true
41
+ port: 8080
42
+ algorithm: 'ROUND_ROBIN'
43
+ members:
44
+ - ip_address: 10.10.1.2
45
+ - ip_address: 10.10.1.3
46
+ virtual_servers:
47
+ - name: 'integration-test-vs-1'
48
+ description: 'A virtual server'
49
+ ip_address: <%= edge_gateway_ext_network_ip %>
50
+ network: <%= edge_gateway_ext_network_id %>
51
+ pool: 'integration-test-pool-1'
52
+ service_profiles:
53
+ http:
54
+ port: 8080
@@ -36,55 +36,72 @@ module Vcloud
36
36
 
37
37
  before(:all) do
38
38
  reset_edge_gateway
39
- @initial_config_file = generate_input_config_file('nat_and_firewall_config.yaml.erb', edge_gateway_erb_input)
39
+ @initial_config_file = generate_input_config_file(
40
+ 'nat_and_firewall_config.yaml.erb',
41
+ edge_gateway_erb_input
42
+ )
43
+ @adding_load_balancer_config_file = generate_input_config_file(
44
+ 'nat_and_firewall_plus_load_balancer_config.yaml.erb',
45
+ edge_gateway_erb_input
46
+ )
40
47
  @edge_gateway = Vcloud::Core::EdgeGateway.get_by_name(@edge_name)
41
48
  end
42
49
 
43
50
  context "Check update is functional" do
44
51
 
45
52
  before(:all) do
46
- local_config = ConfigLoader.new.load_config(@initial_config_file, Vcloud::Schema::EDGE_GATEWAY_SERVICES)
53
+ local_config = ConfigLoader.new.load_config(
54
+ @initial_config_file,
55
+ Vcloud::Schema::EDGE_GATEWAY_SERVICES
56
+ )
47
57
  end
48
58
 
49
59
  it "should be starting our tests from an empty EdgeGateway" do
50
60
  remote_vcloud_config = @edge_gateway.vcloud_attributes[:Configuration][:EdgeGatewayServiceConfiguration]
51
61
  expect(remote_vcloud_config[:FirewallService][:FirewallRule].empty?).to be_true
52
62
  expect(remote_vcloud_config[:NatService][:NatRule].empty?).to be_true
63
+ expect(remote_vcloud_config[:LoadBalancerService][:Pool].empty?).to be_true
64
+ expect(remote_vcloud_config[:LoadBalancerService][:VirtualServer].empty?).to be_true
53
65
  end
54
66
 
55
- it "should only need to make one call to Core::EdgeGateway.update_configuration to update configuration" do
56
- q = Query.new('edgeGateway', :filter => "name==#{@edge_name}")
57
- result = q.get_all_results
58
- latest_task = result.first[:task]
59
-
60
- expect_any_instance_of(Core::EdgeGateway).to receive(:update_configuration).exactly(1).times.and_call_original
67
+ it "should only create one edgeGateway update task when updating the configuration" do
68
+ start_time = DateTime.now()
69
+ task_list_before_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
61
70
  EdgeGatewayServices.new.update(@initial_config_file)
62
-
63
- test_result = q.get_all_results
64
- test_latest_task = test_result.first[:task]
65
-
66
- # confirm that a task has been run on the EdgeGateway
67
- expect(latest_task == test_latest_task).to be_false
71
+ task_list_after_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
72
+ expect(task_list_after_update.size - task_list_before_update.size).to be(1)
68
73
  end
69
74
 
70
- it "should now have nat and firewall rules configured" do
75
+ it "should now have nat and firewall rules configured, no load balancer yet" do
71
76
  remote_vcloud_config = @edge_gateway.vcloud_attributes[:Configuration][:EdgeGatewayServiceConfiguration]
72
77
  expect(remote_vcloud_config[:FirewallService][:FirewallRule].empty?).to be_false
73
78
  expect(remote_vcloud_config[:NatService][:NatRule].empty?).to be_false
79
+ expect(remote_vcloud_config[:LoadBalancerService][:Pool].empty?).to be(true)
80
+ expect(remote_vcloud_config[:LoadBalancerService][:VirtualServer].empty?).to be(true)
74
81
  end
75
82
 
76
83
  it "should not update the EdgeGateway again if the config hasn't changed" do
77
- q = Query.new('edgeGateway', :filter => "name==#{@edge_name}")
78
- result = q.get_all_results
79
- latest_task = result.first[:task]
80
-
84
+ start_time = DateTime.now()
85
+ task_list_before_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
81
86
  EdgeGatewayServices.new.update(@initial_config_file)
87
+ task_list_after_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
88
+ expect(task_list_after_update.size - task_list_before_update.size).to be(0)
89
+ end
82
90
 
83
- test_result = q.get_all_results
84
- test_latest_task = result.first[:task]
91
+ it "should only create one additional edgeGateway update task when adding the LoadBalancer config" do
92
+ start_time = DateTime.now()
93
+ task_list_before_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
94
+ EdgeGatewayServices.new.update(@adding_load_balancer_config_file)
95
+ task_list_after_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
96
+ expect(task_list_after_update.size - task_list_before_update.size).to be(1)
97
+ end
85
98
 
86
- # No task has been run on the EdgeGateway since the one before update was called
87
- expect(latest_task == test_latest_task).to be_true
99
+ it "should not update the EdgeGateway again if we reapply the 'adding load balancer' config" do
100
+ start_time = DateTime.now()
101
+ task_list_before_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
102
+ EdgeGatewayServices.new.update(@adding_load_balancer_config_file)
103
+ task_list_after_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
104
+ expect(task_list_after_update.size - task_list_before_update.size).to be(0)
88
105
  end
89
106
 
90
107
  end
@@ -123,9 +140,21 @@ module Vcloud
123
140
  edge_gateway_name: @edge_name,
124
141
  network_id: @ext_net_id,
125
142
  original_ip: @ext_net_ip,
143
+ edge_gateway_ext_network_id: @ext_net_id,
144
+ edge_gateway_ext_network_ip: @ext_net_ip,
126
145
  }
127
146
  end
128
147
 
148
+ def get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(timestamp)
149
+ vcloud_time = timestamp.strftime('%FT%T.000Z')
150
+ q = Query.new('task',
151
+ :filter =>
152
+ "name==networkConfigureEdgeGatewayServices;objectName==#{@edge_name};startDate=ge=#{vcloud_time}",
153
+ :sortDesc => 'startDate',
154
+ )
155
+ q.get_all_results
156
+ end
157
+
129
158
  end
130
159
 
131
160
  end