vagrant-openstack-provider 0.3.4.pre → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -14,9 +14,11 @@ describe VagrantPlugins::Openstack::Action::ReadSSHInfo do
14
14
  config.stub(:tenant_name) { 'testTenant' }
15
15
  config.stub(:username) { 'username' }
16
16
  config.stub(:password) { 'password' }
17
- config.stub(:ssh_username) { 'sshuser' }
17
+ config.stub(:ssh_username) { 'test_username' }
18
18
  config.stub(:floating_ip) { nil }
19
19
  config.stub(:floating_ip_pool) { nil }
20
+ config.stub(:keypair_name) { nil }
21
+ config.stub(:public_key_path) { nil }
20
22
  end
21
23
  end
22
24
 
@@ -36,12 +38,26 @@ describe VagrantPlugins::Openstack::Action::ReadSSHInfo do
36
38
  end
37
39
  end
38
40
 
41
+ let(:ssh_config) do
42
+ double('ssh_config').tap do |config|
43
+ config.stub(:username) { 'sshuser' }
44
+ config.stub(:port) { nil }
45
+ end
46
+ end
47
+
48
+ let(:machine_config) do
49
+ double('machine_config').tap do |config|
50
+ config.stub(:ssh) { ssh_config }
51
+ end
52
+ end
53
+
39
54
  let(:env) do
40
55
  Hash.new.tap do |env|
41
56
  env[:ui] = double('ui')
42
57
  env[:ui].stub(:info).with(anything)
43
58
  env[:machine] = double('machine')
44
59
  env[:machine].stub(:provider_config) { config }
60
+ env[:machine].stub(:config) { machine_config }
45
61
  env[:machine].stub(:id) { '1234' }
46
62
  env[:machine].stub(:data_dir) { '/data/dir' }
47
63
  env[:openstack_client] = double('openstack_client')
@@ -56,6 +72,36 @@ describe VagrantPlugins::Openstack::Action::ReadSSHInfo do
56
72
  end
57
73
 
58
74
  describe 'read_ssh_info' do
75
+ context 'with deprecated ssh_username specified' do
76
+ context 'with ssh.username specified' do
77
+ it 'returns ssh.username' do
78
+ ssh_config.stub(:username) { 'sshuser' }
79
+ config.stub(:ssh_username) { 'test_username' }
80
+ config.stub(:floating_ip) { '80.80.80.80' }
81
+ config.stub(:keypair_name) { 'my_keypair' }
82
+ @action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 22, username: 'sshuser')
83
+ end
84
+ end
85
+ context 'without ssh.username specified' do
86
+ it 'returns ssh.username' do
87
+ ssh_config.stub(:username) { nil }
88
+ config.stub(:ssh_username) { 'test_username' }
89
+ config.stub(:floating_ip) { '80.80.80.80' }
90
+ config.stub(:keypair_name) { 'my_keypair' }
91
+ @action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 22, username: 'test_username')
92
+ end
93
+ end
94
+ end
95
+
96
+ context 'with ssh.port overriden' do
97
+ it 'returns ssh.port' do
98
+ ssh_config.stub(:port) { 33 }
99
+ config.stub(:floating_ip) { '80.80.80.80' }
100
+ config.stub(:keypair_name) { 'my_keypair' }
101
+ @action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 33, username: 'sshuser')
102
+ end
103
+ end
104
+
59
105
  context 'with config.floating_ip specified' do
60
106
  context 'with keypair_name specified' do
61
107
  it 'returns the specified floating ip' do
@@ -84,9 +130,7 @@ describe VagrantPlugins::Openstack::Action::ReadSSHInfo do
84
130
  end
85
131
  end
86
132
  end
87
- end
88
133
 
89
- describe 'read_ssh_info' do
90
134
  context 'without config.floating_ip specified' do
91
135
  it 'return the a floating_ip found by querying server details' do
92
136
  nova.stub(:get_server_details).with(env, '1234') do
@@ -106,4 +150,5 @@ describe VagrantPlugins::Openstack::Action::ReadSSHInfo do
106
150
  end
107
151
  end
108
152
  end
153
+
109
154
  end
@@ -0,0 +1,114 @@
1
+ require 'vagrant-openstack-provider/spec_helper'
2
+
3
+ describe VagrantPlugins::Openstack::CinderClient do
4
+
5
+ let(:env) do
6
+ Hash.new
7
+ end
8
+
9
+ let(:session) do
10
+ VagrantPlugins::Openstack.session
11
+ end
12
+
13
+ before :each do
14
+ session.token = '123456'
15
+ session.project_id = 'a1b2c3'
16
+ session.endpoints = { volume: 'http://cinder' }
17
+ @cinder_client = VagrantPlugins::Openstack::CinderClient.instance
18
+ end
19
+
20
+ describe 'get_all_volumes' do
21
+ context 'on api v1' do
22
+ it 'returns volumes with details' do
23
+
24
+ stub_request(:get, 'http://cinder/volumes/detail')
25
+ .with(
26
+ headers:
27
+ {
28
+ 'Accept' => 'application/json',
29
+ 'X-Auth-Token' => '123456'
30
+ })
31
+ .to_return(
32
+ status: 200,
33
+ body: '
34
+ {
35
+ "volumes": [
36
+ {
37
+ "id": "987",
38
+ "display_name": "vol-01",
39
+ "size": "2",
40
+ "status": "available",
41
+ "bootable": "true",
42
+ "attachments": []
43
+ },
44
+ {
45
+ "id": "654",
46
+ "display_name": "vol-02",
47
+ "size": "4",
48
+ "status": "in-use",
49
+ "bootable": "false",
50
+ "attachments": [
51
+ {
52
+ "server_id": "inst-01",
53
+ "device": "/dev/vdc"
54
+ }
55
+ ]
56
+ }
57
+ ]
58
+ }
59
+ ')
60
+
61
+ volumes = @cinder_client.get_all_volumes(env)
62
+
63
+ expect(volumes).to eq [Volume.new('987', 'vol-01', '2', 'available', 'true', nil, nil),
64
+ Volume.new('654', 'vol-02', '4', 'in-use', 'false', 'inst-01', '/dev/vdc')]
65
+ end
66
+ end
67
+
68
+ context 'on api v2' do
69
+ it 'returns volumes with details' do
70
+
71
+ stub_request(:get, 'http://cinder/volumes/detail')
72
+ .with(
73
+ headers:
74
+ {
75
+ 'Accept' => 'application/json',
76
+ 'X-Auth-Token' => '123456'
77
+ })
78
+ .to_return(
79
+ status: 200,
80
+ body: '
81
+ {
82
+ "volumes": [
83
+ {
84
+ "id": "987",
85
+ "name": "vol-01",
86
+ "size": "2",
87
+ "status": "available",
88
+ "bootable": "true",
89
+ "attachments": []
90
+ },
91
+ {
92
+ "id": "654",
93
+ "name": "vol-02",
94
+ "size": "4",
95
+ "status": "in-use",
96
+ "bootable": "false",
97
+ "attachments": [
98
+ {
99
+ "server_id": "inst-01",
100
+ "device": "/dev/vdc"
101
+ }
102
+ ]
103
+ }
104
+ ]
105
+ }')
106
+
107
+ volumes = @cinder_client.get_all_volumes(env)
108
+
109
+ expect(volumes).to eq [Volume.new('987', 'vol-01', '2', 'available', 'true', nil, nil),
110
+ Volume.new('654', 'vol-02', '4', 'in-use', 'false', 'inst-01', '/dev/vdc')]
111
+ end
112
+ end
113
+ end
114
+ end
@@ -114,6 +114,37 @@ describe VagrantPlugins::Openstack::NovaClient do
114
114
  expect(instance_id).to eq('o1o2o3')
115
115
  end
116
116
 
117
+ context 'with all options specified' do
118
+ it 'returns new instance id' do
119
+ stub_request(:post, 'http://nova/a1b2c3/servers')
120
+ .with(
121
+ body: '{"server":{"name":"inst","imageRef":"img","flavorRef":"flav","key_name":"key",'\
122
+ '"security_groups":["default"],"user_data":"user_data_test","metadata":"metadata_test"},'\
123
+ '"scheduler_hints":"sched_hints_test"}',
124
+ headers:
125
+ {
126
+ 'Accept' => 'application/json',
127
+ 'Content-Type' => 'application/json',
128
+ 'X-Auth-Token' => '123456'
129
+ })
130
+ .to_return(status: 202, body: '{ "server": { "id": "o1o2o3" } }')
131
+
132
+ instance_id = @nova_client.create_server(
133
+ env,
134
+ name: 'inst',
135
+ image_ref: 'img',
136
+ flavor_ref: 'flav',
137
+ networks: nil,
138
+ keypair: 'key',
139
+ security_groups: ['default'],
140
+ user_data: 'user_data_test',
141
+ metadata: 'metadata_test',
142
+ scheduler_hints: 'sched_hints_test')
143
+
144
+ expect(instance_id).to eq('o1o2o3')
145
+ end
146
+ end
147
+
117
148
  context 'with one two networks' do
118
149
  it 'returns new instance id' do
119
150
 
@@ -154,6 +185,25 @@ describe VagrantPlugins::Openstack::NovaClient do
154
185
  end
155
186
  end
156
187
 
188
+ context 'with volume_boot' do
189
+ it 'returns new instance id' do
190
+
191
+ stub_request(:post, 'http://nova/a1b2c3/servers')
192
+ .with(
193
+ body: '{"server":{"name":"inst","block_device_mapping":[{"volume_id":"vol","device_name":"vda"}],"flavorRef":"flav","key_name":"key"}}',
194
+ headers:
195
+ {
196
+ 'Accept' => 'application/json',
197
+ 'Content-Type' => 'application/json',
198
+ 'X-Auth-Token' => '123456'
199
+ })
200
+ .to_return(status: 202, body: '{ "server": { "id": "o1o2o3" } }')
201
+
202
+ instance_id = @nova_client.create_server(env, name: 'inst', volume_boot: { id: 'vol', device: 'vda' }, flavor_ref: 'flav', keypair: 'key')
203
+
204
+ expect(instance_id).to eq('o1o2o3')
205
+ end
206
+ end
157
207
  end
158
208
  end
159
209
 
@@ -3,17 +3,6 @@ require 'vagrant-openstack-provider/spec_helper'
3
3
  describe VagrantPlugins::Openstack::Command::FloatingIpList do
4
4
  describe 'cmd' do
5
5
 
6
- let(:config) do
7
- double('config').tap do |config|
8
- config.stub(:openstack_auth_url) { 'http://keystoneAuthV2' }
9
- config.stub(:openstack_compute_url) { nil }
10
- config.stub(:openstack_network_url) { nil }
11
- config.stub(:tenant_name) { 'testTenant' }
12
- config.stub(:username) { 'username' }
13
- config.stub(:password) { 'password' }
14
- end
15
- end
16
-
17
6
  let(:nova) do
18
7
  double('nova').tap do |nova|
19
8
  nova.stub(:get_floating_ip_pools) do
@@ -61,6 +50,8 @@ describe VagrantPlugins::Openstack::Command::FloatingIpList do
61
50
  end
62
51
 
63
52
  it 'should get floating ip and floating ip pool from server' do
53
+ nova.should_receive(:get_floating_ip_pools).with(env)
54
+ nova.should_receive(:get_floating_ips).with(env)
64
55
  @floating_ip_list_cmd.cmd('floatingip-list', ['--'], env)
65
56
  end
66
57
  end
@@ -0,0 +1,33 @@
1
+ require 'vagrant-openstack-provider/spec_helper'
2
+
3
+ describe VagrantPlugins::Openstack::Command::FloatingIpList do
4
+ describe 'cmd' do
5
+
6
+ let(:cinder) do
7
+ double('cinder').tap do |cinder|
8
+ cinder.stub(:get_all_volumes) do
9
+ [Volume.new('987', 'vol-01', '2', 'available', 'true', nil, nil),
10
+ Volume.new('654', 'vol-02', '4', 'in-use', 'false', 'inst-01', '/dev/vdc')]
11
+ end
12
+ end
13
+ end
14
+
15
+ let(:env) do
16
+ Hash.new.tap do |env|
17
+ env[:ui] = double('ui')
18
+ env[:ui].stub(:info).with(anything)
19
+ env[:openstack_client] = double
20
+ env[:openstack_client].stub(:cinder) { cinder }
21
+ end
22
+ end
23
+
24
+ before :each do
25
+ @volume_list_cmd = VagrantPlugins::Openstack::Command::VolumeList.new(nil, env)
26
+ end
27
+
28
+ it 'should get volumes list from server' do
29
+ cinder.should_receive(:get_all_volumes).with(env)
30
+ @volume_list_cmd.cmd('volume-list', [], env)
31
+ end
32
+ end
33
+ end
@@ -22,6 +22,11 @@ describe VagrantPlugins::Openstack::Config do
22
22
  its(:public_key_path) { should be_nil }
23
23
  its(:availability_zone) { should be_nil }
24
24
  its(:ssh_username) { should be_nil }
25
+ its(:floating_ip_pool_always_allocate) { should be_false }
26
+ its(:scheduler_hints) { should be_nil }
27
+ its(:security_groups) { should be_nil }
28
+ its(:user_data) { should be_nil }
29
+ its(:metadata) { should be_nil }
25
30
  end
26
31
 
27
32
  describe 'overriding defaults' do
@@ -35,6 +40,11 @@ describe VagrantPlugins::Openstack::Config do
35
40
  :username,
36
41
  :keypair_name,
37
42
  :ssh_username,
43
+ :floating_ip_pool_always_allocate,
44
+ :scheduler_hints,
45
+ :security_groups,
46
+ :user_data,
47
+ :metadata,
38
48
  :availability_zone,
39
49
  :public_key_path].each do |attribute|
40
50
  it "should not default #{attribute} if overridden" do
@@ -64,6 +74,7 @@ describe VagrantPlugins::Openstack::Config do
64
74
  error_message.stub(:yellow) { 'Yellowed Error message ' }
65
75
  machine.stub_chain(:env, :root_path).and_return '/'
66
76
  ssh.stub(:private_key_path) { 'private key path' }
77
+ ssh.stub(:username) { 'ssh username' }
67
78
  config.stub(:ssh) { ssh }
68
79
  machine.stub(:config) { config }
69
80
  subject.username = 'foo'
@@ -86,6 +97,15 @@ describe VagrantPlugins::Openstack::Config do
86
97
  end
87
98
  end
88
99
 
100
+ context 'with no ssh username provider' do
101
+ it 'should raise an error' do
102
+ ssh.stub(:username) { nil }
103
+ subject.ssh_username = nil
104
+ I18n.should_receive(:t).with('vagrant_openstack.config.ssh_username_required').and_return error_message
105
+ validation_errors.first.should == error_message
106
+ end
107
+ end
108
+
89
109
  context 'with good values' do
90
110
  it 'should validate' do
91
111
  validation_errors.should be_empty
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-openstack-provider
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4.pre
4
+ version: 0.4.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Guillaume Giamarchi
@@ -9,11 +10,12 @@ authors:
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2014-09-19 00:00:00.000000000 Z
13
+ date: 2014-09-22 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: json
16
17
  requirement: !ruby/object:Gem::Requirement
18
+ none: false
17
19
  requirements:
18
20
  - - '='
19
21
  - !ruby/object:Gem::Version
@@ -21,6 +23,7 @@ dependencies:
21
23
  type: :runtime
22
24
  prerelease: false
23
25
  version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
24
27
  requirements:
25
28
  - - '='
26
29
  - !ruby/object:Gem::Version
@@ -28,6 +31,7 @@ dependencies:
28
31
  - !ruby/object:Gem::Dependency
29
32
  name: rest-client
30
33
  requirement: !ruby/object:Gem::Requirement
34
+ none: false
31
35
  requirements:
32
36
  - - ~>
33
37
  - !ruby/object:Gem::Version
@@ -35,6 +39,7 @@ dependencies:
35
39
  type: :runtime
36
40
  prerelease: false
37
41
  version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
38
43
  requirements:
39
44
  - - ~>
40
45
  - !ruby/object:Gem::Version
@@ -42,6 +47,7 @@ dependencies:
42
47
  - !ruby/object:Gem::Dependency
43
48
  name: terminal-table
44
49
  requirement: !ruby/object:Gem::Requirement
50
+ none: false
45
51
  requirements:
46
52
  - - '='
47
53
  - !ruby/object:Gem::Version
@@ -49,6 +55,7 @@ dependencies:
49
55
  type: :runtime
50
56
  prerelease: false
51
57
  version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
52
59
  requirements:
53
60
  - - '='
54
61
  - !ruby/object:Gem::Version
@@ -56,6 +63,7 @@ dependencies:
56
63
  - !ruby/object:Gem::Dependency
57
64
  name: sshkey
58
65
  requirement: !ruby/object:Gem::Requirement
66
+ none: false
59
67
  requirements:
60
68
  - - '='
61
69
  - !ruby/object:Gem::Version
@@ -63,6 +71,7 @@ dependencies:
63
71
  type: :runtime
64
72
  prerelease: false
65
73
  version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
66
75
  requirements:
67
76
  - - '='
68
77
  - !ruby/object:Gem::Version
@@ -70,6 +79,7 @@ dependencies:
70
79
  - !ruby/object:Gem::Dependency
71
80
  name: colorize
72
81
  requirement: !ruby/object:Gem::Requirement
82
+ none: false
73
83
  requirements:
74
84
  - - '='
75
85
  - !ruby/object:Gem::Version
@@ -77,6 +87,7 @@ dependencies:
77
87
  type: :runtime
78
88
  prerelease: false
79
89
  version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
80
91
  requirements:
81
92
  - - '='
82
93
  - !ruby/object:Gem::Version
@@ -84,20 +95,23 @@ dependencies:
84
95
  - !ruby/object:Gem::Dependency
85
96
  name: rake
86
97
  requirement: !ruby/object:Gem::Requirement
98
+ none: false
87
99
  requirements:
88
- - - '>='
100
+ - - ! '>='
89
101
  - !ruby/object:Gem::Version
90
102
  version: '0'
91
103
  type: :development
92
104
  prerelease: false
93
105
  version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
94
107
  requirements:
95
- - - '>='
108
+ - - ! '>='
96
109
  - !ruby/object:Gem::Version
97
110
  version: '0'
98
111
  - !ruby/object:Gem::Dependency
99
112
  name: rspec
100
113
  requirement: !ruby/object:Gem::Requirement
114
+ none: false
101
115
  requirements:
102
116
  - - ~>
103
117
  - !ruby/object:Gem::Version
@@ -105,6 +119,7 @@ dependencies:
105
119
  type: :development
106
120
  prerelease: false
107
121
  version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
108
123
  requirements:
109
124
  - - ~>
110
125
  - !ruby/object:Gem::Version
@@ -112,15 +127,17 @@ dependencies:
112
127
  - !ruby/object:Gem::Dependency
113
128
  name: aruba
114
129
  requirement: !ruby/object:Gem::Requirement
130
+ none: false
115
131
  requirements:
116
- - - '>='
132
+ - - ! '>='
117
133
  - !ruby/object:Gem::Version
118
134
  version: '0'
119
135
  type: :development
120
136
  prerelease: false
121
137
  version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
122
139
  requirements:
123
- - - '>='
140
+ - - ! '>='
124
141
  - !ruby/object:Gem::Version
125
142
  version: '0'
126
143
  description: Enables Vagrant to manage machines in Openstack Cloud.
@@ -165,6 +182,7 @@ files:
165
182
  - lib/vagrant-openstack-provider/action/sync_folders.rb
166
183
  - lib/vagrant-openstack-provider/action/wait_active.rb
167
184
  - lib/vagrant-openstack-provider/action/wait_stop.rb
185
+ - lib/vagrant-openstack-provider/client/cinder.rb
168
186
  - lib/vagrant-openstack-provider/client/domain.rb
169
187
  - lib/vagrant-openstack-provider/client/http_utils.rb
170
188
  - lib/vagrant-openstack-provider/client/keystone.rb
@@ -179,6 +197,7 @@ files:
179
197
  - lib/vagrant-openstack-provider/command/main.rb
180
198
  - lib/vagrant-openstack-provider/command/network_list.rb
181
199
  - lib/vagrant-openstack-provider/command/utils.rb
200
+ - lib/vagrant-openstack-provider/command/volume_list.rb
182
201
  - lib/vagrant-openstack-provider/config.rb
183
202
  - lib/vagrant-openstack-provider/errors.rb
184
203
  - lib/vagrant-openstack-provider/plugin.rb
@@ -188,11 +207,13 @@ files:
188
207
  - spec/vagrant-openstack-provider/action/connect_openstack_spec.rb
189
208
  - spec/vagrant-openstack-provider/action/create_server_spec.rb
190
209
  - spec/vagrant-openstack-provider/action/read_ssh_info_spec.rb
210
+ - spec/vagrant-openstack-provider/client/cinder_spec.rb
191
211
  - spec/vagrant-openstack-provider/client/keystone_spec.rb
192
212
  - spec/vagrant-openstack-provider/client/neutron_spec.rb
193
213
  - spec/vagrant-openstack-provider/client/nova_spec.rb
194
214
  - spec/vagrant-openstack-provider/client/utils_spec.rb
195
215
  - spec/vagrant-openstack-provider/command/floatingip_list_spec.rb
216
+ - spec/vagrant-openstack-provider/command/volume_list_spec.rb
196
217
  - spec/vagrant-openstack-provider/config_spec.rb
197
218
  - spec/vagrant-openstack-provider/provider_spec.rb
198
219
  - spec/vagrant-openstack-provider/spec_helper.rb
@@ -200,36 +221,45 @@ files:
200
221
  - vagrant-openstack-provider.gemspec
201
222
  homepage: https://github.com/ggiamarchi/vagrant-openstack-provider
202
223
  licenses: []
203
- metadata: {}
204
224
  post_install_message:
205
225
  rdoc_options: []
206
226
  require_paths:
207
227
  - lib
208
228
  required_ruby_version: !ruby/object:Gem::Requirement
229
+ none: false
209
230
  requirements:
210
- - - '>='
231
+ - - ! '>='
211
232
  - !ruby/object:Gem::Version
212
233
  version: '0'
234
+ segments:
235
+ - 0
236
+ hash: -4437050053646903495
213
237
  required_rubygems_version: !ruby/object:Gem::Requirement
238
+ none: false
214
239
  requirements:
215
- - - '>'
240
+ - - ! '>='
216
241
  - !ruby/object:Gem::Version
217
- version: 1.3.1
242
+ version: '0'
243
+ segments:
244
+ - 0
245
+ hash: -4437050053646903495
218
246
  requirements: []
219
247
  rubyforge_project:
220
- rubygems_version: 2.0.14
248
+ rubygems_version: 1.8.23.2
221
249
  signing_key:
222
- specification_version: 4
250
+ specification_version: 3
223
251
  summary: Enables Vagrant to manage machines in Openstack Cloud.
224
252
  test_files:
225
253
  - spec/vagrant-openstack-provider/action/connect_openstack_spec.rb
226
254
  - spec/vagrant-openstack-provider/action/create_server_spec.rb
227
255
  - spec/vagrant-openstack-provider/action/read_ssh_info_spec.rb
256
+ - spec/vagrant-openstack-provider/client/cinder_spec.rb
228
257
  - spec/vagrant-openstack-provider/client/keystone_spec.rb
229
258
  - spec/vagrant-openstack-provider/client/neutron_spec.rb
230
259
  - spec/vagrant-openstack-provider/client/nova_spec.rb
231
260
  - spec/vagrant-openstack-provider/client/utils_spec.rb
232
261
  - spec/vagrant-openstack-provider/command/floatingip_list_spec.rb
262
+ - spec/vagrant-openstack-provider/command/volume_list_spec.rb
233
263
  - spec/vagrant-openstack-provider/config_spec.rb
234
264
  - spec/vagrant-openstack-provider/provider_spec.rb
235
265
  - spec/vagrant-openstack-provider/spec_helper.rb