vcloud-core 0.0.12 → 0.0.13

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,9 @@
1
+ ## 0.0.13 (2014-04-30)
2
+
3
+ Feature:
4
+
5
+ - Remove support for Query API formats - we only ever use 'record' format.
6
+
1
7
  ## 0.0.12 (2014-04-22)
2
8
 
3
9
  Bugfix:
data/README.md CHANGED
@@ -18,6 +18,44 @@ Or install it yourself as:
18
18
 
19
19
  $ gem install vcloud-core
20
20
 
21
+ ## Credentials
22
+
23
+ vCloud Core is based around [fog](http://fog.io/). To use it you'll need to give it
24
+ credentials that allow it to talk to a vCloud Director environment.
25
+
26
+ 1. Create a '.fog' file in your home directory.
27
+
28
+ For example:
29
+
30
+ test_credentials:
31
+ vcloud_director_host: 'host.api.example.com'
32
+ vcloud_director_username: 'username@org_name'
33
+ vcloud_director_password: ''
34
+
35
+ 2. Obtain a session token. First, curl the API:
36
+
37
+ curl -D- -d '' \
38
+ -H 'Accept: application/*+xml;version=5.1' -u '<username>@<org_name>' \
39
+ https://<host.api.example.com>/api/sessions
40
+
41
+ This will prompt for your password.
42
+
43
+ From the headers returned, the value of the `x-vcloud-authorization` header is your
44
+ session token, and this will be valid for 30 minutes idle - any activity will extend
45
+ its life by another 30 minutes.
46
+
47
+ 3. Specify your credentials and session token at the beginning of the command. For example:
48
+
49
+ FOG_CREDENTIAL=test_credentials \
50
+ FOG_VCLOUD_TOKEN=AAAABBBBBCCCCCCDDDDDDEEEEEEFFFFF= \
51
+ vcloud-query
52
+
53
+ You may find it easier to export one or both of the values as environment variables.
54
+
55
+ **NB** It is also possible to sidestep the need for the session token by saving your
56
+ password in the fog file. This is **not recommended**.
57
+
58
+
21
59
  ## VCloud Query
22
60
 
23
61
  ### Get results from the vCloud Query API
@@ -49,7 +87,7 @@ NB: examples assume FOG_CREDENTIAL or FOG_VCLOUD_TOKEN has been set accordingly.
49
87
  # Get general usage info
50
88
  vcloud-query --help
51
89
 
52
- # Get a list of all queriable types (left column)
90
+ # Get a list of all queriable entity types
53
91
  vcloud-query
54
92
 
55
93
  # Get all VMs with VMware Tools less than 9282, that are not a vApp Template:
@@ -89,13 +127,29 @@ Entity metadata queries have their own subsyntax incorporating the value types:
89
127
 
90
128
  See http://pubs.vmware.com/vcd-51/topic/com.vmware.vcloud.api.doc_51/GUID-4FD71B6D-6797-4B8E-B9F0-618F4ACBEFAC.html for details.
91
129
 
130
+ ## The vCloud API
131
+
132
+ 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.
133
+
134
+ The default version is defined in [Fog](https://github.com/fog/fog/blob/244a049918604eadbcebd3a8eaaf433424fe4617/lib/fog/vcloud_director/compute.rb#L32).
135
+
136
+ 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.
137
+
138
+ `vcloud_director_api_version: 5.1`
139
+
140
+ ## Debugging
141
+
142
+ `export EXCON_DEBUG=true` - this will print out the API requests and responses.
143
+
144
+ `export DEBUG=true` - this will show you the stack trace when there is an exception instead of just the message.
145
+
92
146
  ## Testing
93
147
 
94
148
  Default target: `bundle exec rake`
95
149
  Runs the unit tests and feature tests.
96
150
 
97
151
  * Unit tests only: `bundle exec rake spec`
98
- * Feature tests only: `bundle exec rake feature`
152
+ * Feature tests only: `bundle exec rake features`
99
153
  * Integration tests: `bundle exec rake integration`
100
154
 
101
155
  ### setting up and describing your environment for test runs
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'rspec/core/rake_task'
2
2
  require 'cucumber/rake/task'
3
3
 
4
- task :default => [:spec, :feature]
4
+ task :default => [:spec, :features]
5
5
 
6
6
  RSpec::Core::RakeTask.new(:spec) do |task|
7
7
  # Set a bogus Fog credential, otherwise it's possible for the unit
@@ -12,7 +12,7 @@ RSpec::Core::RakeTask.new(:spec) do |task|
12
12
  task.pattern = FileList['spec/vcloud/**/*_spec.rb']
13
13
  end
14
14
 
15
- Cucumber::Rake::Task.new(:feature) do |t|
15
+ Cucumber::Rake::Task.new(:features) do |t|
16
16
  t.cucumber_opts = "--format pretty --no-source"
17
17
  t.fork = false
18
18
  end
data/bin/vcloud-query CHANGED
@@ -29,10 +29,6 @@ class App
29
29
  options[:fields] = v
30
30
  end
31
31
 
32
- on('--format', '=ATTRIBUTE', 'Data format to retrieve: records, idrecords, references') do |v|
33
- options[:format] = v
34
- end
35
-
36
32
  on('--filter', '=FILTER', 'Filter expression') do |v|
37
33
  options[:filter] = v
38
34
  end
data/jenkins.sh CHANGED
@@ -7,4 +7,5 @@ git clean -fdx
7
7
  bundle install --path "${HOME}/bundles/${JOB_NAME}"
8
8
 
9
9
  bundle exec rake
10
+ RUBYOPT="-r ./tools/fog_credentials" bundle exec rake integration
10
11
  bundle exec rake publish_gem
@@ -0,0 +1,4 @@
1
+ #!/bin/bash -x
2
+ set -e
3
+ bundle install --path "${HOME}/bundles/${JOB_NAME}"
4
+ RUBYOPT="-r ./tools/fog_credentials" bundle exec rake integration
@@ -32,32 +32,11 @@ module Vcloud
32
32
  end
33
33
 
34
34
  def output_available_query_types
35
- available_query_types = @query_runner.available_query_types
36
- available_queries = collate_formats_for_types(available_query_types)
37
- print_query_types(available_queries)
38
- end
39
-
40
- def collate_formats_for_types(available_queries)
41
- queries = Hash.new { |h, k| h[k]=[] }
42
- available_queries.each do |type, format|
43
- queries[type] << format
44
- end
45
- queries
46
- end
47
-
48
- def print_query_types(queries)
49
- type_width = longest_query_type(queries)
50
-
51
- queries.keys.sort.each do |type|
52
- puts "%-#{type_width}s %s" % [type, queries[type].sort.join(',')]
35
+ @query_runner.available_query_types.each do |entity_type|
36
+ puts entity_type
53
37
  end
54
38
  end
55
39
 
56
- def longest_query_type(queries)
57
- return 0 if queries.keys.empty?
58
- queries.keys.max_by{|key| key.length}.length
59
- end
60
-
61
40
  def output_header(results)
62
41
  return if results.size == 0
63
42
  case @options[:output_format]
@@ -6,21 +6,36 @@ module Vcloud
6
6
  end
7
7
 
8
8
  def run(type=nil, options={})
9
+ raise ArgumentError, "Query API :format option is not supported" if options[:format]
9
10
  get_all_results(type, options)
10
11
  end
11
12
 
12
13
  def available_query_types
13
- query_list = @fsi.get_execute_query()
14
- query_list[:Link].select do |link|
14
+ query_body = @fsi.get_execute_query()
15
+ get_entity_types_in_record_format(query_body)
16
+ end
17
+
18
+ private
19
+
20
+ def get_entity_types_in_record_format(query_body)
21
+ query_links = query_body.fetch(:Link).select do |link|
15
22
  link[:rel] == 'down'
16
- end.map do |link|
17
- href = Nokogiri::XML.fragment(link[:href])
18
- query = CGI.parse(URI.parse(href.text).query)
19
- [query['type'].first, query['format'].first]
20
23
  end
24
+ entity_types = []
25
+ query_links.each do |link|
26
+ (entity_type, query_format) = extract_query_type_and_format_from_link(link)
27
+ entity_types << entity_type if query_format == 'records'
28
+ end
29
+ entity_types
21
30
  end
22
31
 
23
- private
32
+ def extract_query_type_and_format_from_link(link)
33
+ href = Nokogiri::XML.fragment(link[:href])
34
+ query = CGI.parse(URI.parse(href.text).query)
35
+ query_format = query['format'].first
36
+ query_type = query['type'].first
37
+ [query_type, query_format]
38
+ end
24
39
 
25
40
  def get_all_results(type, options)
26
41
  results = []
@@ -1,5 +1,5 @@
1
1
  module Vcloud
2
2
  module Core
3
- VERSION = '0.0.12'
3
+ VERSION = '0.0.13'
4
4
  end
5
5
  end
@@ -114,8 +114,7 @@ module Vcloud
114
114
 
115
115
  def generate_preamble(script_path, script_post_processor, vars)
116
116
  vapp_name = @vapp.name
117
- script = ERB.new(File.read(File.expand_path(script_path)), nil, '>-')
118
- .result(binding)
117
+ script = ERB.new(File.read(File.expand_path(script_path)), nil, '>-').result(binding)
119
118
  if script_post_processor
120
119
  script = Open3.capture2(File.expand_path(script_post_processor),
121
120
  stdin_data: script).first
@@ -3,6 +3,20 @@ require 'spec_helper'
3
3
  module Vcloud
4
4
  module Core
5
5
  describe EdgeGateway do
6
+
7
+ required_env = {
8
+ 'VCLOUD_EDGE_GATEWAY' => 'to name of VSE',
9
+ }
10
+
11
+ error = false
12
+ required_env.each do |var,message|
13
+ unless ENV[var]
14
+ puts "Must set #{var} #{message}" unless ENV[var]
15
+ error = true
16
+ end
17
+ end
18
+ Kernel.exit(2) if error
19
+
6
20
  it "configure firewall service" do
7
21
  configuration = {
8
22
  :FirewallService =>
@@ -3,6 +3,22 @@ require 'spec_helper'
3
3
  module Vcloud
4
4
  module Core
5
5
  describe EdgeGateway do
6
+
7
+ required_env = {
8
+ 'VCLOUD_EDGE_GATEWAY' => 'to name of VSE',
9
+ 'VCLOUD_PROVIDER_NETWORK_ID' => 'to ID of VSE external network',
10
+ 'VCLOUD_NETWORK1_ID' => 'to the ID of a VSE internal network',
11
+ }
12
+
13
+ error = false
14
+ required_env.each do |var,message|
15
+ unless ENV[var]
16
+ puts "Must set #{var} #{message}" unless ENV[var]
17
+ error = true
18
+ end
19
+ end
20
+ Kernel.exit(2) if error
21
+
6
22
  context "get vcloud attributes for given gateway interface id " do
7
23
  before(:all) do
8
24
  @edge_gateway = EdgeGateway.get_by_name(ENV['VCLOUD_EDGE_GATEWAY'])
@@ -0,0 +1,225 @@
1
+ require 'spec_helper'
2
+
3
+ module Vcloud
4
+ module Core
5
+ describe QueryRunner do
6
+
7
+ required_env = {
8
+ 'VCLOUD_VDC_NAME' =>
9
+ 'to the name of an orgVdc to use to instantiate vApps into',
10
+ 'VCLOUD_TEMPLATE_NAME' =>
11
+ 'to the name of a vAppTemplate to use create vApps in tests',
12
+ 'VCLOUD_CATALOG_NAME' =>
13
+ 'to the name of the catalog that VCLOUD_VAPP_TEMPLATE_NAME is stored in',
14
+ }
15
+
16
+ error = false
17
+ required_env.each do |var,message|
18
+ unless ENV[var]
19
+ puts "Must set #{var} #{message}" unless ENV[var]
20
+ error = true
21
+ end
22
+ end
23
+ Kernel.exit(2) if error
24
+
25
+ before(:all) do
26
+ @vapp_template_name = ENV['VCLOUD_TEMPLATE_NAME']
27
+ @vapp_template_catalog_name = ENV['VCLOUD_CATALOG_NAME']
28
+ @vdc_name = ENV['VCLOUD_VDC_NAME']
29
+ end
30
+
31
+ context "#available_query_types" do
32
+
33
+ before(:all) do
34
+ @query_types = QueryRunner.new.available_query_types
35
+ end
36
+
37
+ context "confirm accessing the query API is functional" do
38
+
39
+ it "returns an Array of available query types" do
40
+ expect(@query_types.class).to eq(Array)
41
+ end
42
+
43
+ it "returns at least one query type" do
44
+ expect(@query_types.size).to be >= 1
45
+ end
46
+
47
+ end
48
+
49
+ context "it supports all the vCloud entity types our tools need" do
50
+
51
+ it "supports the vApp entity type" do
52
+ expect(@query_types.include?("vApp")).to be_true
53
+ end
54
+
55
+ it "supports the vm entity type" do
56
+ expect(@query_types.include?("vm")).to be_true
57
+ end
58
+
59
+ it "supports the orgVdc entity type" do
60
+ expect(@query_types.include?("orgVdc")).to be_true
61
+ end
62
+
63
+ it "supports the orgVdcNetwork entity type" do
64
+ expect(@query_types.include?("orgVdcNetwork")).to be_true
65
+ end
66
+
67
+ it "supports the edgeGateway entity type" do
68
+ expect(@query_types.include?("edgeGateway")).to be_true
69
+ end
70
+
71
+ it "supports the task entity type" do
72
+ expect(@query_types.include?("task")).to be_true
73
+ end
74
+
75
+ it "supports the catalog entity type" do
76
+ expect(@query_types.include?("catalog")).to be_true
77
+ end
78
+
79
+ it "supports the catalogItem entity type" do
80
+ expect(@query_types.include?("catalogItem")).to be_true
81
+ end
82
+
83
+ it "supports the vAppTemplate entity type" do
84
+ expect(@query_types.include?("vAppTemplate")).to be_true
85
+ end
86
+
87
+ end
88
+
89
+ end
90
+
91
+ context "#run" do
92
+
93
+ before(:all) do
94
+ @number_of_vapps_to_create = 2
95
+ @test_case_vapps = create_test_case_vapps(
96
+ @number_of_vapps_to_create,
97
+ @vdc_name,
98
+ @vapp_template_catalog_name,
99
+ @vapp_template_name,
100
+ )
101
+ end
102
+
103
+ context "vApps are queriable with no options specified" do
104
+
105
+ before(:all) do
106
+ @all_vapps = QueryRunner.new.run('vApp')
107
+ end
108
+
109
+ it "returns an Array" do
110
+ expect(@all_vapps.class).to eq(Array)
111
+ end
112
+
113
+ it "returns at least the number of vApps that we created" do
114
+ expect(@all_vapps.size).to be >= @number_of_vapps_to_create
115
+ end
116
+
117
+ it "returns a record with a defined :name field" do
118
+ expect(@all_vapps.first[:name]).not_to be_empty
119
+ end
120
+
121
+ it "returns a record with a defined :href field" do
122
+ expect(@all_vapps.first[:href]).not_to be_empty
123
+ end
124
+
125
+ it "returns a record with a defined :vdcName field" do
126
+ expect(@all_vapps.first[:vdcName]).not_to be_empty
127
+ end
128
+
129
+ it "returns a record with a defined :status field" do
130
+ expect(@all_vapps.first[:status]).not_to be_empty
131
+ end
132
+
133
+ it "does not return a 'bogusElement' element" do
134
+ expect(@all_vapps.first.key?(:bogusElement)).to be false
135
+ end
136
+
137
+ end
138
+
139
+ context "Query output fields can be limited by supplying a comma-separated :fields list" do
140
+
141
+ before(:all) do
142
+ @results = QueryRunner.new.run('vApp', fields: "name,vdcName")
143
+ end
144
+
145
+ it "returns a record with a defined name element" do
146
+ expect(@results.first[:name]).not_to be_empty
147
+ end
148
+
149
+ it "returns a record with a defined vdcName element" do
150
+ expect(@results.first[:vdcName]).not_to be_empty
151
+ end
152
+
153
+ it "does not return a 'status' record, which we know is available for our vApp type" do
154
+ expect(@results.first.key?(:status)).to be false
155
+ end
156
+
157
+ end
158
+
159
+ context "Query API does not support an empty :fields list" do
160
+
161
+ it "raises a BadRequest exception, if empty string is supplied for :fields" do
162
+ expect { QueryRunner.new.run('vApp', fields: "") }.
163
+ to raise_exception(::Fog::Compute::VcloudDirector::BadRequest)
164
+ end
165
+
166
+ end
167
+
168
+ context "Query API returns href field regardless of filter :fields selected" do
169
+
170
+ it "returns href as well as name, if just 'name' is asked for" do
171
+ results = QueryRunner.new.run('vApp', fields: "name")
172
+ expect(results.first.keys.sort).to eq([:href, :name])
173
+ end
174
+
175
+ it "returns href, name, vdcName if 'name,vdcName' is asked for" do
176
+ results = QueryRunner.new.run('vApp', fields: "name,vdcName")
177
+ expect(results.first.keys.sort).to eq([:href, :name, :vdcName])
178
+ end
179
+
180
+ end
181
+
182
+ context "query output can be restricted by a filter expression on name" do
183
+
184
+ before(:all) do
185
+ @vapp_name = @test_case_vapps.last.name
186
+ @filtered_results = QueryRunner.new.run('vApp', filter: "name==#{@vapp_name}")
187
+ end
188
+
189
+ it "returns a single record matching our filter on name" do
190
+ expect(@filtered_results.size).to be(1)
191
+ expect(@filtered_results.first.fetch(:name)).to eq(@vapp_name)
192
+ end
193
+
194
+ end
195
+
196
+ after(:all) do
197
+ fsi = Vcloud::Fog::ServiceInterface.new()
198
+ @test_case_vapps.each do |vapp|
199
+ fsi.delete_vapp(vapp.id)
200
+ end
201
+ end
202
+
203
+ def create_test_case_vapps(quantity, vdc_name, catalog_name, vapp_template_name)
204
+ vapp_template = VappTemplate.get(catalog_name, vapp_template_name)
205
+ timestamp_in_s = Time.new.to_i
206
+ base_vapp_name = "vcloud-core-query-tests-#{timestamp_in_s}-"
207
+ network_names = []
208
+ vapp_list = []
209
+ quantity.times do |index|
210
+ vapp_list << Vapp.instantiate(
211
+ base_vapp_name + index.to_s,
212
+ network_names,
213
+ vapp_template.id,
214
+ vdc_name
215
+ )
216
+ end
217
+ vapp_list
218
+ end
219
+
220
+ end
221
+
222
+ end
223
+ end
224
+ end
225
+
@@ -8,44 +8,48 @@ describe Vcloud::QueryRunner do
8
8
  end
9
9
 
10
10
  context '#available_query_types' do
11
- it 'should return empty array if no data' do
12
- @mock_fog_interface.stub(:get_execute_query).and_return({:Link => {}})
13
11
 
12
+ it 'should return empty array if no query type links are returned from API' do
13
+ @mock_fog_interface.stub(:get_execute_query).and_return({:Link => {}})
14
14
  result = @query_runner.available_query_types
15
-
16
15
  result.size.should == 0
17
16
  end
18
17
 
19
- it 'should parse the query types returned' do
18
+ it 'should parse the format=records query hrefs into a list of entity types' do
20
19
  @mock_fog_interface.stub(:get_execute_query).and_return(
21
20
  {:Link => [
22
21
  {:rel => 'down',
23
- :href => 'query?type=alice&#38;format=references'},
22
+ :href => 'query?type=alice&#38;format=records'},
23
+ {:rel => 'down',
24
+ :href => 'query?type=bob&#38;format=records'},
25
+ {:rel => 'down',
26
+ :href => 'query?type=charlie&#38;format=records'},
24
27
  ]})
25
-
26
- result = @query_runner.available_query_types
27
-
28
- result.size.should == 1
29
- result[0][0].should == 'alice'
30
- result[0][1].should == 'references'
28
+ expect(@query_runner.available_query_types).to eq(['alice', 'bob', 'charlie'])
31
29
  end
32
30
 
33
- it 'should return the set of data' do
31
+ it 'should ignore query links with format=references and format=idrecords' do
34
32
  @mock_fog_interface.stub(:get_execute_query).and_return(
35
33
  {:Link => [
36
34
  {:rel => 'down',
37
35
  :href => 'query?type=alice&#38;format=references'},
38
36
  {:rel => 'down',
39
- :href => 'query?type=bob&#38;format=references'},
37
+ :href => 'query?type=bob&#38;format=idrecords'},
38
+ {:rel => 'down',
39
+ :href => 'query?type=charlie&#38;format=records'},
40
40
  ]})
41
-
42
- result = @query_runner.available_query_types
43
-
44
- result.size.should == 2
41
+ expect(@query_runner.available_query_types).to eq(['charlie'])
45
42
  end
43
+
46
44
  end
47
45
 
48
46
  context '#run' do
47
+
48
+ it "should raise an error if a :format option is supplied" do
49
+ expect { @query_runner.run('vApp', :format => 'references') }.
50
+ to raise_error(ArgumentError, "Query API :format option is not supported")
51
+ end
52
+
49
53
  it 'should return no results when fog returns no results' do
50
54
  @mock_fog_interface.stub(:get_execute_query).and_return({})
51
55
 
@@ -5,20 +5,14 @@ describe Vcloud::Query do
5
5
 
6
6
  context "#run called with no type set on construction" do
7
7
 
8
- it "should get and reformat query types" do
8
+ it "should output all types that are available" do
9
9
  query_runner = double(Vcloud::QueryRunner)
10
- allow(query_runner).to receive(:available_query_types) {
11
- [
12
- ['alice', 'references'],
13
- ['alice', 'records'],
14
- ['bob', 'records']
15
- ]
16
- }
10
+ allow(query_runner).to receive(:available_query_types) { [ 'alice', 'bob' ] }
17
11
 
18
12
  @query = Vcloud::Query.new(nil, {}, query_runner)
19
13
 
20
- @query.should_receive(:puts).with("alice records,references")
21
- @query.should_receive(:puts).with("bob records")
14
+ @query.should_receive(:puts).with("alice")
15
+ @query.should_receive(:puts).with("bob")
22
16
 
23
17
  @query.run
24
18
  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
+ }
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.12
4
+ version: 0.0.13
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-04-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
@@ -158,6 +158,7 @@ files:
158
158
  - features/support/env.rb
159
159
  - features/vcloud-query.feature
160
160
  - jenkins.sh
161
+ - jenkins_integration_tests.sh
161
162
  - lib/vcloud/core.rb
162
163
  - lib/vcloud/core/compute_metadata.rb
163
164
  - lib/vcloud/core/config_loader.rb
@@ -181,6 +182,7 @@ files:
181
182
  - lib/vcloud/fog/service_interface.rb
182
183
  - spec/integration/edge_gateway/configure_edge_gateway_services_spec.rb
183
184
  - spec/integration/edge_gateway/edge_gateway_spec.rb
185
+ - spec/integration/query/query_runner_spec.rb
184
186
  - spec/spec_helper.rb
185
187
  - spec/support/stub_fog_interface.rb
186
188
  - spec/vcloud/core/config_loader_spec.rb
@@ -202,6 +204,7 @@ files:
202
204
  - spec/vcloud/core/vm_spec.rb
203
205
  - spec/vcloud/fog/fog_model_interface_spec.rb
204
206
  - spec/vcloud/fog/service_interface_spec.rb
207
+ - tools/fog_credentials.rb
205
208
  - vcloud-core.gemspec
206
209
  homepage: http://github.com/alphagov/vcloud-core
207
210
  licenses:
@@ -224,7 +227,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
224
227
  version: '0'
225
228
  segments:
226
229
  - 0
227
- hash: 3087589811732903826
230
+ hash: 4282482764039593007
228
231
  requirements: []
229
232
  rubyforge_project:
230
233
  rubygems_version: 1.8.23
@@ -236,6 +239,7 @@ test_files:
236
239
  - features/vcloud-query.feature
237
240
  - spec/integration/edge_gateway/configure_edge_gateway_services_spec.rb
238
241
  - spec/integration/edge_gateway/edge_gateway_spec.rb
242
+ - spec/integration/query/query_runner_spec.rb
239
243
  - spec/spec_helper.rb
240
244
  - spec/support/stub_fog_interface.rb
241
245
  - spec/vcloud/core/config_loader_spec.rb