vcloud-edge_gateway 0.2.3 → 0.2.4

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 CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.2.4 (2014-05-01)
2
+
3
+ - Use pessimistic version dependency for vcloud-core
4
+
1
5
  ## 0.2.3 (2014-04-22)
2
6
 
3
7
  Bugfixes:
data/README.md CHANGED
@@ -25,63 +25,43 @@ To configure an Edge Gateway:
25
25
 
26
26
  $ vcloud-configure-edge input.yaml
27
27
 
28
- ### Credentials
28
+ ## Credentials
29
29
 
30
- vCloud Edge Gateway is based around [fog]. To use it you'll need to give it credentials that allow it to talk to a VMware
31
- environment. Fog offers two ways to do this.
30
+ vCloud Edge Gateway is based around [fog](http://fog.io/). To use it you'll need to give it
31
+ credentials that allow it to talk to a vCloud Director environment.
32
32
 
33
- #### 1. Create a `.fog` file containing your credentials
33
+ 1. Create a '.fog' file in your home directory.
34
34
 
35
- To use this method, you need a `.fog` file in your home directory.
35
+ For example:
36
36
 
37
- For example:
38
-
39
- test:
40
- vcloud_director_username: 'username@org_name'
41
- vcloud_director_password: 'password'
42
- vcloud_director_host: 'host.api.example.com'
43
-
44
- Unfortunately current usage of fog requires the password in this file. Multiple sets of credentials can be specified in the fog file, using the following format:
45
-
46
- test:
47
- vcloud_director_username: 'username@org_name'
48
- vcloud_director_password: 'password'
49
- vcloud_director_host: 'host.api.example.com'
50
-
51
- test2:
52
- vcloud_director_username: 'username@org_name'
53
- vcloud_director_password: 'password'
54
- vcloud_director_host: 'host.api.vendor.net'
55
-
56
- You can then pass the `FOG_CREDENTIAL` environment variable at the start of your command. The value of the `FOG_CREDENTIAL` environment variable is the name of the credential set in your fog file which you wish to use. For instance:
37
+ test_credentials:
38
+ vcloud_director_host: 'host.api.example.com'
39
+ vcloud_director_username: 'username@org_name'
40
+ vcloud_director_password: ''
57
41
 
58
- $ FOG_CREDENTIAL=test2 vcloud-configure-edge input.yaml
42
+ 2. Obtain a session token. First, curl the API:
59
43
 
60
- To understand more about `.fog` files, visit the 'Credentials' section here => http://fog.io/about/getting_started.html.
44
+ curl -D- -d '' \
45
+ -H 'Accept: application/*+xml;version=5.1' -u '<username>@<org_name>' \
46
+ https://<host.api.example.com>/api/sessions
61
47
 
62
- #### 2. Log on externally and supply your session token
48
+ This will prompt for your password.
63
49
 
64
- You can choose to log on externally by interacting independently with the API and supplying your session token to the
65
- tool by setting the `FOG_VCLOUD_TOKEN` ENV variable. This option reduces the risk footprint by allowing the user to
66
- store their credentials in safe storage. The default token lifetime is '30 minutes idle' - any activity extends the life by another 30 mins.
50
+ From the headers returned, the value of the `x-vcloud-authorization` header is your
51
+ session token, and this will be valid for 30 minutes idle - any activity will extend
52
+ its life by another 30 minutes.
67
53
 
68
- A basic example of this would be the following:
54
+ 3. Specify your credentials and session token at the beginning of the command. For example:
69
55
 
70
- curl
71
- -D-
72
- -d ''
73
- -H 'Accept: application/*+xml;version=5.1' -u '<user>@<org>'
74
- https://host.com/api/sessions
56
+ FOG_CREDENTIAL=test_credentials \
57
+ FOG_VCLOUD_TOKEN=AAAABBBBBCCCCCCDDDDDDEEEEEEFFFFF= \
58
+ vcloud-configure-edge input.yaml
75
59
 
76
- This will prompt for your password.
60
+ You may find it easier to export one or both of the values as environment variables.
77
61
 
78
- From the headers returned, select the header below
62
+ **NB** It is also possible to sidestep the need for the session token by saving your
63
+ password in the fog file. This is **not recommended**.
79
64
 
80
- x-vcloud-authorization: AAAABBBBBCCCCCCDDDDDDEEEEEEFFFFF=
81
-
82
- Use token as ENV var FOG_VCLOUD_TOKEN
83
-
84
- $ FOG_VCLOUD_TOKEN=AAAABBBBBCCCCCCDDDDDDEEEEEEFFFFF= vcloud-configure-edge input.yaml
85
65
 
86
66
  ### Configure edge gateway services
87
67
 
@@ -414,6 +394,15 @@ cat edges.out | jq '
414
394
 
415
395
  You can find full configuration examples in the `examples` folder.
416
396
 
397
+ ## The vCloud API
398
+
399
+ vCloud Tools currently use version 5.1 of the [vCloud API](http://pubs.vmware.com/vcd-51/index.jsp?topic=%2Fcom.vmware.vcloud.api.doc_51%2FGUID-F4BF9D5D-EF66-4D36-A6EB-2086703F6E37.html). Version 5.5 may work but is not currently supported. You should be able to access the 5.1 API in a 5.5 environment, and this *is* currently supported.
400
+
401
+ The default version is defined in [Fog](https://github.com/fog/fog/blob/244a049918604eadbcebd3a8eaaf433424fe4617/lib/fog/vcloud_director/compute.rb#L32).
402
+
403
+ If you want to be sure you are pinning to 5.1, or use 5.5, you can set the API version to use in your fog file, e.g.
404
+
405
+ `vcloud_director_api_version: 5.1`
417
406
 
418
407
  ## Debugging
419
408
 
data/Rakefile CHANGED
@@ -10,14 +10,19 @@ RSpec::Core::RakeTask.new(:spec) do |task|
10
10
  task.pattern = FileList['spec/vcloud/**/*_spec.rb']
11
11
  end
12
12
 
13
- task :default => [:spec]
13
+ task :default => [:rubocop, :spec]
14
14
 
15
15
  RSpec::Core::RakeTask.new('integration') do |t|
16
16
  t.pattern = FileList['spec/integration/**/*_spec.rb']
17
17
  end
18
18
 
19
19
  require "gem_publisher"
20
- task :publish_gem do |t|
20
+ task :publish_gem do
21
21
  gem = GemPublisher.publish_if_updated("vcloud-edge_gateway.gemspec", :rubygems)
22
22
  puts "Published #{gem}" if gem
23
23
  end
24
+
25
+ require 'rubocop/rake_task'
26
+ Rubocop::RakeTask.new(:rubocop) do |task|
27
+ task.options = ['--lint']
28
+ end
@@ -1,12 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- begin
4
- require 'rubygems'
5
- require 'methadone'
6
- gem 'vcloud-edge_gateway'
7
- rescue LoadError
8
- end
9
-
3
+ require 'methadone'
10
4
  require 'vcloud/edge_gateway'
11
5
 
12
6
  class App
data/jenkins.sh CHANGED
@@ -3,9 +3,6 @@ set -e
3
3
  bundle install --path "${HOME}/bundles/${JOB_NAME}"
4
4
  bundle exec rake
5
5
 
6
- ./scripts/generate_fog_conf_file.sh
7
- export FOG_RC=fog_integration_test.config
8
- bundle exec rake integration
9
- rm fog_integration_test.config
6
+ RUBYOPT="-r ./tools/fog_credentials" bundle exec rake integration
10
7
 
11
8
  bundle exec rake publish_gem
@@ -2,7 +2,4 @@
2
2
  set -e
3
3
  bundle install --path "${HOME}/bundles/${JOB_NAME}"
4
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
5
+ RUBYOPT="-r ./tools/fog_credentials" bundle exec rake integration
@@ -15,13 +15,13 @@ module Vcloud
15
15
  load_balancer_input_config[:enabled].to_s : 'true'
16
16
  vcloud_pools = []
17
17
  vcloud_virtual_servers = []
18
- if pools = load_balancer_input_config[:pools]
19
- pools.each do |pool_input_entry|
18
+ if load_balancer_input_config[:pools]
19
+ load_balancer_input_config[:pools].each do |pool_input_entry|
20
20
  vcloud_pools << generate_pool_entry(pool_input_entry)
21
21
  end
22
22
  end
23
- if virtual_servers = load_balancer_input_config[:virtual_servers]
24
- virtual_servers.each do |virtual_server_input_entry|
23
+ if load_balancer_input_config[:virtual_servers]
24
+ load_balancer_input_config[:virtual_servers].each do |virtual_server_input_entry|
25
25
  vcloud_virtual_servers << generate_virtual_server_entry(virtual_server_input_entry)
26
26
  end
27
27
  end
@@ -81,7 +81,7 @@ module Vcloud
81
81
  IsEnabled: 'false',
82
82
  Protocol: protocol.to_s.upcase,
83
83
  Port: default_port(protocol),
84
- Persistence: generate_virtual_server_persistence_section(protocol, nil)
84
+ Persistence: generate_virtual_server_persistence_section(nil)
85
85
  }
86
86
  if input_protocol_section
87
87
  vcloud_protocol_section[:IsEnabled] =
@@ -91,10 +91,7 @@ module Vcloud
91
91
  input_protocol_section.key?(:port) ?
92
92
  input_protocol_section[:port].to_s : default_port(protocol)
93
93
  vcloud_protocol_section[:Persistence] =
94
- generate_virtual_server_persistence_section(
95
- protocol,
96
- input_protocol_section[:persistence]
97
- )
94
+ generate_virtual_server_persistence_section(input_protocol_section[:persistence])
98
95
  end
99
96
  vcloud_protocol_section
100
97
  end
@@ -104,7 +101,7 @@ module Vcloud
104
101
  default_port_for[protocol]
105
102
  end
106
103
 
107
- def generate_virtual_server_persistence_section(protocol, input_persistence_section)
104
+ def generate_virtual_server_persistence_section(input_persistence_section)
108
105
  input_persistence_section = {} if input_persistence_section.nil?
109
106
  vcloud_persistence_section = { Method: '' }
110
107
  if input_persistence_section.key?(:method)
@@ -174,9 +171,9 @@ module Vcloud
174
171
  vcloud_pool_service_port[:Port] =
175
172
  input_pool_service_port.key?(:port) ?
176
173
  input_pool_service_port[:port].to_s : default_port(mode)
177
- if health_check = input_pool_service_port[:health_check]
174
+ if input_pool_service_port[:health_check]
178
175
  vcloud_pool_service_port[:HealthCheckPort] =
179
- health_check.key?(:port) ? health_check[:port].to_s : ''
176
+ input_pool_service_port[:health_check].fetch(:port, '').to_s
180
177
  vcloud_pool_service_port[:HealthCheck] =
181
178
  generate_pool_healthcheck(mode, input_pool_service_port[:health_check])
182
179
  end
@@ -33,11 +33,11 @@ module Vcloud
33
33
  end
34
34
 
35
35
  def populate_gateway_nat_rule(rule)
36
- raise "Must supply a :network_id parameter" unless net_id = rule[:network_id]
36
+ raise "Must supply a :network_id parameter" unless rule[:network_id]
37
37
  edge_gw_interface = @edge_gateway_interfaces.find do |interface|
38
- interface.network_id == net_id
38
+ interface.network_id == rule[:network_id]
39
39
  end
40
- raise "unable to find gateway network interface with id #{net_id}" unless edge_gw_interface
40
+ raise "unable to find gateway network interface with id #{rule[:network_id]}" unless edge_gw_interface
41
41
  gateway_nat_rule = {}
42
42
  gateway_nat_rule[:Interface] = populate_nat_interface(edge_gw_interface)
43
43
  gateway_nat_rule[:OriginalIp] = rule[:original_ip]
@@ -1,6 +1,6 @@
1
1
  module Vcloud
2
2
  module EdgeGateway
3
- VERSION = '0.2.3'
3
+ VERSION = '0.2.4'
4
4
  end
5
5
  end
6
6
 
@@ -126,7 +126,7 @@ module Vcloud
126
126
  differ = config_differ.new(local, remote)
127
127
  expect(differ.diff).to eq(output)
128
128
  end
129
- end
129
+ end
130
130
 
131
131
  end
132
132
  end
@@ -0,0 +1,17 @@
1
+ # Initialiser for getting vCloud credentials into Fog from Jenkins build
2
+ # parameters, without needing to write them to disk. To be used with:
3
+ #
4
+ # RUBYOPT="-r ./tools/fog_credentials" bundle exec integration
5
+ #
6
+ # Replace with FOG_VCLOUD_TOKEN support when we have a tool:
7
+ #
8
+ # https://www.pivotaltracker.com/story/show/68989754
9
+ #
10
+ require 'bundler/setup'
11
+ require 'fog'
12
+
13
+ Fog.credentials = {
14
+ :vcloud_director_host => ENV['API_HOST'],
15
+ :vcloud_director_username => ENV['API_USERNAME'],
16
+ :vcloud_director_password => ENV['API_PASSWORD'],
17
+ }
@@ -22,10 +22,11 @@ Gem::Specification.new do |s|
22
22
  s.required_ruby_version = '>= 1.9.2'
23
23
 
24
24
  s.add_runtime_dependency 'fog', '>= 1.21.0'
25
- s.add_runtime_dependency 'vcloud-core', '>= 0.0.12'
25
+ s.add_runtime_dependency 'vcloud-core', '~> 0.0.12'
26
26
  s.add_runtime_dependency 'hashdiff'
27
27
  s.add_development_dependency 'rake'
28
28
  s.add_development_dependency 'rspec', '~> 2.14.1'
29
+ s.add_development_dependency 'rubocop'
29
30
  s.add_development_dependency 'simplecov', '~> 0.8.2'
30
31
  s.add_development_dependency 'gem_publisher', '1.2.0'
31
32
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vcloud-edge_gateway
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
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-04-22 00:00:00.000000000 Z
12
+ date: 2014-05-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
@@ -32,7 +32,7 @@ dependencies:
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
- - - ! '>='
35
+ - - ~>
36
36
  - !ruby/object:Gem::Version
37
37
  version: 0.0.12
38
38
  type: :runtime
@@ -40,7 +40,7 @@ dependencies:
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ! '>='
43
+ - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: 0.0.12
46
46
  - !ruby/object:Gem::Dependency
@@ -91,6 +91,22 @@ dependencies:
91
91
  - - ~>
92
92
  - !ruby/object:Gem::Version
93
93
  version: 2.14.1
94
+ - !ruby/object:Gem::Dependency
95
+ name: rubocop
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
94
110
  - !ruby/object:Gem::Dependency
95
111
  name: simplecov
96
112
  requirement: !ruby/object:Gem::Requirement
@@ -159,7 +175,6 @@ files:
159
175
  - lib/vcloud/schema/firewall_service.rb
160
176
  - lib/vcloud/schema/load_balancer_service.rb
161
177
  - lib/vcloud/schema/nat_service.rb
162
- - scripts/generate_fog_conf_file.sh
163
178
  - spec/erb_helper.rb
164
179
  - spec/integration/edge_gateway/data/firewall_config.yaml.erb
165
180
  - spec/integration/edge_gateway/data/firewall_config_updated_rule.yaml.erb
@@ -202,6 +217,7 @@ files:
202
217
  - spec/vcloud/edge_gateway/load_balancer_schema_validation_spec.rb
203
218
  - spec/vcloud/edge_gateway/nat_configuration_differ_spec.rb
204
219
  - spec/vcloud/edge_gateway/nat_schema_validation_spec.rb
220
+ - tools/fog_credentials.rb
205
221
  - vcloud-edge_gateway.gemspec
206
222
  homepage: http://github.com/alphagov/vcloud-edge_gateway
207
223
  licenses:
@@ -224,7 +240,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
224
240
  version: '0'
225
241
  segments:
226
242
  - 0
227
- hash: -981764383968782471
243
+ hash: 346937587144257703
228
244
  requirements: []
229
245
  rubyforge_project:
230
246
  rubygems_version: 1.8.23
@@ -1,6 +0,0 @@
1
- cat <<EOF >fog_integration_test.config
2
- default:
3
- vcloud_director_username: '$API_USERNAME'
4
- vcloud_director_password: '$API_PASSWORD'
5
- vcloud_director_host: '$API_HOST'
6
- EOF