vcloud-network-configurator 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/.gitignore +2 -0
  2. data/Gemfile +4 -0
  3. data/README.md +116 -0
  4. data/Rakefile +25 -0
  5. data/bin/vcloud_configure_edge_gateway +5 -0
  6. data/docs/find_network_url.md +56 -0
  7. data/docs/find_organisation_edgegateway_uuid.md +58 -0
  8. data/jenkins.sh +6 -0
  9. data/lib/component/firewall.rb +82 -0
  10. data/lib/component/load_balancer.rb +181 -0
  11. data/lib/component/nat.rb +73 -0
  12. data/lib/vcloud_network_configurator.rb +64 -0
  13. data/lib/vcloud_network_configurator/configure_task.rb +22 -0
  14. data/lib/vcloud_network_configurator/edge_gateway.rb +51 -0
  15. data/lib/vcloud_network_configurator/vcloud_auth_request.rb +39 -0
  16. data/lib/vcloud_network_configurator/vcloud_check_for_configure_task_request.rb +26 -0
  17. data/lib/vcloud_network_configurator/vcloud_configure_request.rb +51 -0
  18. data/lib/vcloud_network_configurator/vcloud_settings.rb +22 -0
  19. data/lib/vcloud_network_configurator/version.rb +1 -0
  20. data/spec/component/firewall.xml +45 -0
  21. data/spec/component/firewall_spec.rb +115 -0
  22. data/spec/component/lb.xml +567 -0
  23. data/spec/component/load_balancer_spec.rb +67 -0
  24. data/spec/component/nat.xml +146 -0
  25. data/spec/component/nat_spec.rb +28 -0
  26. data/spec/integration/authorization_failed_spec.rb +26 -0
  27. data/spec/integration/happy_path_firewall_spec.rb +74 -0
  28. data/spec/integration/happy_path_loadbalancer_spec.rb +173 -0
  29. data/spec/integration/happy_path_nat_spec.rb +78 -0
  30. data/spec/integration/test_data/happy_path_auth_response.xml +30 -0
  31. data/spec/integration/test_data/rules_dir/common_firewall.rb +6 -0
  32. data/spec/integration/test_data/rules_dir/common_lb.rb +10 -0
  33. data/spec/integration/test_data/rules_dir/common_nat.rb +0 -0
  34. data/spec/integration/test_data/rules_dir/preview/firewall.rb +0 -0
  35. data/spec/integration/test_data/rules_dir/preview/interfaces.yaml +2 -0
  36. data/spec/integration/test_data/rules_dir/preview/lb.rb +0 -0
  37. data/spec/integration/test_data/rules_dir/preview/nat.rb +4 -0
  38. data/spec/spec_helper.rb +9 -0
  39. data/spec/vcloud_network_configurator/configure_task_spec.rb +59 -0
  40. data/spec/vcloud_network_configurator/edge_gateway_spec.rb +41 -0
  41. data/spec/vcloud_network_configurator/vcloud_auth_request_spec.rb +20 -0
  42. data/spec/vcloud_network_configurator/vcloud_settings_spec.rb +19 -0
  43. data/vcloud-network-configurator.gemspec +33 -0
  44. metadata +212 -0
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+ require 'vcloud_network_configurator'
3
+
4
+ describe "happy path for nat configurations" do
5
+
6
+ before :each do
7
+ WebMock.disable_net_connect!
8
+ WebMock.reset!
9
+
10
+ session_url = "https://super%40preview:man@www.vcloud.eggplant.com/sessions"
11
+ edge_gateway_configure_url = "https://www.vcloud.eggplant.com/admin/edgeGateway/123321/action/configureServices"
12
+ task_url = "https://www.vcloud.eggplant.com/api/tasks/10"
13
+
14
+ stub_request(:post, session_url).
15
+ with(:headers => {'Accept'=>'application/*+xml;version=5.1', 'User-Agent'=>'Ruby'}).
16
+ to_return(:status => 200,
17
+ :body => File.read('spec/integration/test_data/happy_path_auth_response.xml'),
18
+ :headers => { 'x-vcloud-authorization' => '123321'})
19
+
20
+ stub_request(:post, edge_gateway_configure_url).
21
+ with(:body => configure_nat_xml,
22
+ :headers => { 'Accept'=>'application/*+xml;version=5.1',
23
+ 'Content-Type'=>'application/vnd.vmware.admin.edgeGatewayServiceConfiguration+xml',
24
+ 'User-Agent'=>'Ruby',
25
+ 'X-Vcloud-Authorization'=>'123321' }).
26
+ to_return(:status => 202, :body => configure_task_xml)
27
+
28
+ stub_request(:get, task_url).
29
+ with(:headers => {'Accept'=>'application/*+xml;version=5.1', 'User-Agent'=>'Ruby', 'X-Vcloud-Authorization'=>'123321'}).
30
+ to_return(:status => 200, :body => configure_task_xml, :headers => {})
31
+ end
32
+
33
+ it "should configure edgegateway successfully" do
34
+ args = ["-u", "super", "-p", "man", "-U", "123321", "-d",
35
+ "spec/integration/test_data/rules_dir", "-e", "preview",
36
+ "-c", "nat", "https://www.vcloud.eggplant.com"]
37
+
38
+ configurator = VcloudNetworkConfigurator.new(args)
39
+ configurator.execute.should be_true
40
+ end
41
+ end
42
+
43
+ def configure_task_xml
44
+ %q{<Task href="https://www.vcloud.eggplant.com/api/tasks/10" status="success"></Task>}
45
+ end
46
+
47
+ def configure_nat_xml
48
+ %q{<?xml version="1.0" encoding="UTF-8"?>
49
+ <EdgeGatewayServiceConfiguration xmlns="http://www.vmware.com/vcloud/v1.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vmware.com/vcloud/v1.5 http://vendor-api-url.net/v1.5/schema/master.xsd">
50
+ <NatService>
51
+ <IsEnabled>true</IsEnabled>
52
+ <NatRule>
53
+ <RuleType>SNAT</RuleType>
54
+ <IsEnabled>true</IsEnabled>
55
+ <Id>65538</Id>
56
+ <GatewayNatRule>
57
+ <Interface type="application/vnd.vmware.admin.network+xml" name="VDC-1" href="http://interface.vdc-1/19237"/>
58
+ <OriginalIp>internal-ip</OriginalIp>
59
+ <TranslatedIp>external-ip</TranslatedIp>
60
+ </GatewayNatRule>
61
+ </NatRule>
62
+ <NatRule>
63
+ <RuleType>DNAT</RuleType>
64
+ <IsEnabled>true</IsEnabled>
65
+ <Id>65539</Id>
66
+ <GatewayNatRule>
67
+ <Interface type="application/vnd.vmware.admin.network+xml" name="VDC-1" href="http://interface.vdc-1/19237"/>
68
+ <OriginalIp>external-ip</OriginalIp>
69
+ <OriginalPort>22</OriginalPort>
70
+ <TranslatedIp>internal-ip</TranslatedIp>
71
+ <TranslatedPort>22</TranslatedPort>
72
+ <Protocol>tcp</Protocol>
73
+ </GatewayNatRule>
74
+ </NatRule>
75
+ </NatService>
76
+ </EdgeGatewayServiceConfiguration>
77
+ }
78
+ end
@@ -0,0 +1,30 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <Session
3
+ xmlns="http://www.vmware.com/vcloud/v1.5"
4
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5
+ href="https://vcloud.example.com/api/session/"
6
+ org="System"
7
+ type="application/vnd.vmware.vcloud.session+xml"
8
+ user="vcloud"
9
+ xsi:schemaLocation="http://www.vmware.com/vcloud/v1.5 http://https://vcloud.example.com/api/v1.5/schema/master.xsd">
10
+ <Link
11
+ href="https://vcloud.example.com/api/org/"
12
+ rel="down"
13
+ type="application/vnd.vmware.vcloud.orgList+xml"/>
14
+ <Link
15
+ href="https://vcloud.example.com/api/admin/"
16
+ rel="down"
17
+ type="application/vnd.vmware.admin.vcloud+xml"/>
18
+ <Link
19
+ href="https://vcloud.example.com/api/admin/extension"
20
+ rel="down"
21
+ type="application/vnd.vmware.admin.vmwExtension+xml"/>
22
+ <Link
23
+ href="https://vcloud.example.com/api/query"
24
+ rel="down"
25
+ type="application/vnd.vmware.vcloud.query.queryList+xml"/>
26
+ <Link
27
+ href="https://vcloud.example.com/api/entity/"
28
+ rel="entityResolver"
29
+ type="application/vnd.vmware.vcloud.entity+xml"/>
30
+ </Session>
@@ -0,0 +1,6 @@
1
+ firewall do
2
+ rule "allow all boxes to access peppers box on port 22" do
3
+ source :ip => '172.10.0.0/24'
4
+ destination :ip => '172.11.0.1', :port => 22
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+ load_balancer do
2
+ configure "Frontend" do
3
+ pool ["20.2.0.1", "20.3.0.2"] do
4
+ http
5
+ https
6
+ end
7
+
8
+ virtual_server :name => "VDC-1", :interface => "VDC-1", :ip => "20.1.0.2"
9
+ end
10
+ end
@@ -0,0 +1,2 @@
1
+ interfaces:
2
+ VDC-1: http://interface.vdc-1/19237
@@ -0,0 +1,4 @@
1
+ nat do
2
+ snat :interface => "VDC-1", :original => { :ip => "internal-ip" }, :translated => { :ip => "external-ip" }, :desc => "description"
3
+ dnat :interface => "VDC-1", :original => { :ip => "external-ip", :port => 22 }, :translated => { :ip => "internal-ip", :port => 22 }, :desc => "SSH"
4
+ end
@@ -0,0 +1,9 @@
1
+ specdir=File.dirname(__FILE__)
2
+ $:.unshift File.join(specdir, '../lib')
3
+ $:.unshift File.join(specdir, '..')
4
+
5
+ require 'webmock/rspec'
6
+ require 'rspec'
7
+
8
+ ENV["GEM_ENV"] = "test"
9
+
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+ require 'vcloud_network_configurator/configure_task'
3
+
4
+ describe ConfigureTask do
5
+
6
+ describe "#url" do
7
+ it "should extract url from xml" do
8
+ ConfigureTask.new(fixture_xml).url.
9
+ should == "https://vendor-api-url.net/task/123321"
10
+ end
11
+ end
12
+
13
+ describe "#complete?" do
14
+ it "should return false id status not success" do
15
+ ConfigureTask.new(fixture_xml).should_not be_complete
16
+ end
17
+
18
+ it "should return false id status not success" do
19
+ success_xml = fixture_xml.gsub("status=\"running\"", "status=\"success\"")
20
+ ConfigureTask.new(success_xml).should be_complete
21
+ end
22
+ end
23
+
24
+ describe "#error?" do
25
+ it "should error out if error code provided" do
26
+ error_xml = fixture_xml.gsub("</Task>",
27
+ "<Error majorErrorCode=\"Bazinga\"></Task>")
28
+ ConfigureTask.new(error_xml).should be_error
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+
35
+ def fixture_xml
36
+ %q{
37
+ <?xml version="1.0" encoding="UTF-8"?>
38
+ <Task xmlns="http://www.vmware.com/vcloud/v1.5" status="running"
39
+ startTime="2013-07-19T14:46:52.943+01:00"
40
+ serviceNamespace="com.vmware.vcloud"
41
+ operationName="networkConfigureEdgeGatewayServices"
42
+ operation="Updating services EdgeGateway GDS Development Gateway"
43
+ expiryTime="2013-10-17T14:46:52.943+01:00" cancelRequested="false" name="task"
44
+ id="urn:vcloud:task:0e38b845-92fb-47e7-bc89-1fa29547f487"
45
+ type="application/vnd.vmware.vcloud.task+xml"
46
+ href="https://vendor-api-url.net/task/123321"
47
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
48
+ xsi:schemaLocation="http://www.vmware.com/vcloud/v1.5 http://vendor-api-url.net/v1.5/schema/master.xsd">
49
+ <Link rel="task:cancel"
50
+ href="https://vendor-api-url.net/task/123321/action/cancel"/>
51
+ <User type="application/vnd.vmware.admin.user+xml" name="gsingh"
52
+ href="https://vendor-api-url.net/admin/user/2020202"/>
53
+ <Organization type="application/vnd.vmware.vcloud.org+xml"
54
+ name="GDS-Development"
55
+ href="https://vendor-api-url.net/org/9999999"/>
56
+ <Progress>0</Progress>
57
+ <Details/>
58
+ </Task>}
59
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+ require 'vcloud_network_configurator/edge_gateway'
3
+
4
+ describe EdgeGateway do
5
+ it "should abort if vcloud api couldn't authenticate" do
6
+ auth_request = mock(:authenticated? => false)
7
+ VcloudAuthRequest.should_receive(:new).and_return(auth_request)
8
+ auth_request.should_receive(:submit).and_return(mock())
9
+
10
+ eg = EdgeGateway.new({:api_url => 'eggplant.com', :edge_gateway_uuid => '123321'})
11
+ lambda { eg.apply_configuration }.should raise_error(SystemExit)
12
+ end
13
+
14
+ it "should authorize and configure changes" do
15
+ vs = mock()
16
+ VcloudSettings.should_receive(:new).
17
+ with({url: 'eggplant.com', edge_gateway_uuid: '123321' }).and_return(vs)
18
+
19
+ auth_request = mock(:authenticated? => true, :submit => true)
20
+ VcloudAuthRequest.should_receive(:new).with(vs, "bringle@gds-aubergine", "eggplant").
21
+ and_return(auth_request)
22
+ auth_request.should_receive(:auth_response).and_return({'x-vcloud-authorization' => '123213'})
23
+
24
+ VcloudConfigureRequest.should_receive(:new).
25
+ with(vs, '123213', 'farm', 'firewall', 'path/to/dir').
26
+ and_return(mock(:submit => true, :success? => true, :response_body => nil))
27
+
28
+ EdgeGateway.any_instance.stub(:check_for_success => true)
29
+
30
+ eg = EdgeGateway.new({:api_url => 'eggplant.com',
31
+ :org_edgegateway_uuid => '123321',
32
+ :username => 'bringle',
33
+ :password => 'eggplant',
34
+ :environment => 'farm',
35
+ :organization => 'gds-aubergine',
36
+ :component => 'firewall',
37
+ :rules_directory => 'path/to/dir',
38
+ })
39
+ eg.apply_configuration
40
+ end
41
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+ require 'vcloud_network_configurator/vcloud_auth_request'
3
+
4
+ describe VcloudAuthRequest do
5
+
6
+ context "submit an auth request" do
7
+ before :each do
8
+ stub_request(:post, "https://super:man@www.foo.bar/sessions").
9
+ with(:headers => { 'Accept' => 'application/*+xml;version=5.1' })
10
+ end
11
+
12
+ it "should return response received" do
13
+ vcloud_settings = VcloudSettings.new({ :url => "https://www.foo.bar" })
14
+ request = VcloudAuthRequest.new vcloud_settings, "super", "man"
15
+
16
+ request.submit
17
+ request.should be_authenticated
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+ require 'vcloud_network_configurator/vcloud_settings'
3
+
4
+ describe VcloudSettings do
5
+
6
+ it "should return session url" do
7
+ settings = VcloudSettings.new({:url => 'www.abra.ka.dabra/api',
8
+ :edge_gateway_uuid => 'sad-123g-12eda-12enas'})
9
+ settings.sessions_url.should == 'www.abra.ka.dabra/api/sessions'
10
+ end
11
+
12
+ it "should return edge_gateway_config_url" do
13
+ settings = VcloudSettings.new({:url => 'www.abra.ka.dabra/api',
14
+ :edge_gateway_uuid => 'sad-123g-12eda-12enas'})
15
+
16
+ settings.edge_gateway_config_url.should == 'www.abra.ka.dabra/api/admin/edgeGateway/sad-123g-12eda-12enas/action/configureServices'
17
+ end
18
+
19
+ end
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "vcloud_network_configurator/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "vcloud-network-configurator"
7
+ s.version = VERSION
8
+ s.authors = ["Garima Singh"]
9
+ s.email = ["igarimasingh@gmail.com"]
10
+ s.homepage = "https://github.com/alphagov/vcloud-network-configurator"
11
+ s.summary = %q{Configure firewall, NAT and load balancer for vcloud}
12
+ s.description = "It allows one to right rules for firewall, NAT and load " +
13
+ "balancer using vcloud API and configure them on the vendor end"
14
+
15
+ s.rubyforge_project = "vcloud-network-configurator"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_development_dependency "rake"
23
+ s.add_development_dependency "minitest"
24
+ s.add_development_dependency "mocha"
25
+ s.add_development_dependency "webmock"
26
+ s.add_development_dependency "rspec", "~> 2.11.0"
27
+ s.add_development_dependency "equivalent-xml", "~> 0.2.9"
28
+ s.add_development_dependency "gem_publisher", "~> 1.3.0"
29
+ s.add_runtime_dependency "parallel"
30
+ s.add_runtime_dependency "highline"
31
+ s.add_runtime_dependency "nokogiri", "~> 1.5.0"
32
+ end
33
+
metadata ADDED
@@ -0,0 +1,212 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vcloud-network-configurator
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - Garima Singh
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2013-08-07 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rake
17
+ requirement: &id001 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: minitest
28
+ requirement: &id002 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: mocha
39
+ requirement: &id003 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: webmock
50
+ requirement: &id004 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *id004
59
+ - !ruby/object:Gem::Dependency
60
+ name: rspec
61
+ requirement: &id005 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: 2.11.0
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: *id005
70
+ - !ruby/object:Gem::Dependency
71
+ name: equivalent-xml
72
+ requirement: &id006 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.2.9
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: *id006
81
+ - !ruby/object:Gem::Dependency
82
+ name: gem_publisher
83
+ requirement: &id007 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: 1.3.0
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: *id007
92
+ - !ruby/object:Gem::Dependency
93
+ name: parallel
94
+ requirement: &id008 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: "0"
100
+ type: :runtime
101
+ prerelease: false
102
+ version_requirements: *id008
103
+ - !ruby/object:Gem::Dependency
104
+ name: highline
105
+ requirement: &id009 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: "0"
111
+ type: :runtime
112
+ prerelease: false
113
+ version_requirements: *id009
114
+ - !ruby/object:Gem::Dependency
115
+ name: nokogiri
116
+ requirement: &id010 !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ~>
120
+ - !ruby/object:Gem::Version
121
+ version: 1.5.0
122
+ type: :runtime
123
+ prerelease: false
124
+ version_requirements: *id010
125
+ description: It allows one to right rules for firewall, NAT and load balancer using vcloud API and configure them on the vendor end
126
+ email:
127
+ - igarimasingh@gmail.com
128
+ executables:
129
+ - vcloud_configure_edge_gateway
130
+ extensions: []
131
+
132
+ extra_rdoc_files: []
133
+
134
+ files:
135
+ - .gitignore
136
+ - Gemfile
137
+ - README.md
138
+ - Rakefile
139
+ - bin/vcloud_configure_edge_gateway
140
+ - docs/find_network_url.md
141
+ - docs/find_organisation_edgegateway_uuid.md
142
+ - jenkins.sh
143
+ - lib/component/firewall.rb
144
+ - lib/component/load_balancer.rb
145
+ - lib/component/nat.rb
146
+ - lib/vcloud_network_configurator.rb
147
+ - lib/vcloud_network_configurator/configure_task.rb
148
+ - lib/vcloud_network_configurator/edge_gateway.rb
149
+ - lib/vcloud_network_configurator/vcloud_auth_request.rb
150
+ - lib/vcloud_network_configurator/vcloud_check_for_configure_task_request.rb
151
+ - lib/vcloud_network_configurator/vcloud_configure_request.rb
152
+ - lib/vcloud_network_configurator/vcloud_settings.rb
153
+ - lib/vcloud_network_configurator/version.rb
154
+ - spec/component/firewall.xml
155
+ - spec/component/firewall_spec.rb
156
+ - spec/component/lb.xml
157
+ - spec/component/load_balancer_spec.rb
158
+ - spec/component/nat.xml
159
+ - spec/component/nat_spec.rb
160
+ - spec/integration/authorization_failed_spec.rb
161
+ - spec/integration/happy_path_firewall_spec.rb
162
+ - spec/integration/happy_path_loadbalancer_spec.rb
163
+ - spec/integration/happy_path_nat_spec.rb
164
+ - spec/integration/test_data/happy_path_auth_response.xml
165
+ - spec/integration/test_data/rules_dir/common_firewall.rb
166
+ - spec/integration/test_data/rules_dir/common_lb.rb
167
+ - spec/integration/test_data/rules_dir/common_nat.rb
168
+ - spec/integration/test_data/rules_dir/preview/firewall.rb
169
+ - spec/integration/test_data/rules_dir/preview/interfaces.yaml
170
+ - spec/integration/test_data/rules_dir/preview/lb.rb
171
+ - spec/integration/test_data/rules_dir/preview/nat.rb
172
+ - spec/spec_helper.rb
173
+ - spec/vcloud_network_configurator/configure_task_spec.rb
174
+ - spec/vcloud_network_configurator/edge_gateway_spec.rb
175
+ - spec/vcloud_network_configurator/vcloud_auth_request_spec.rb
176
+ - spec/vcloud_network_configurator/vcloud_settings_spec.rb
177
+ - vcloud-network-configurator.gemspec
178
+ homepage: https://github.com/alphagov/vcloud-network-configurator
179
+ licenses: []
180
+
181
+ post_install_message:
182
+ rdoc_options: []
183
+
184
+ require_paths:
185
+ - lib
186
+ required_ruby_version: !ruby/object:Gem::Requirement
187
+ none: false
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ hash: -3951837720681967727
192
+ segments:
193
+ - 0
194
+ version: "0"
195
+ required_rubygems_version: !ruby/object:Gem::Requirement
196
+ none: false
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ hash: -3951837720681967727
201
+ segments:
202
+ - 0
203
+ version: "0"
204
+ requirements: []
205
+
206
+ rubyforge_project: vcloud-network-configurator
207
+ rubygems_version: 1.8.24
208
+ signing_key:
209
+ specification_version: 3
210
+ summary: Configure firewall, NAT and load balancer for vcloud
211
+ test_files: []
212
+