vagrant-openstack-provider 0.9.0 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/CHANGELOG.md +6 -0
- data/lib/vagrant-openstack-provider/action.rb +82 -0
- data/lib/vagrant-openstack-provider/action/snapshot_cleanup.rb +32 -0
- data/lib/vagrant-openstack-provider/action/snapshot_delete.rb +32 -0
- data/lib/vagrant-openstack-provider/action/snapshot_list.rb +22 -0
- data/lib/vagrant-openstack-provider/action/snapshot_restore.rb +29 -0
- data/lib/vagrant-openstack-provider/action/snapshot_save.rb +51 -0
- data/lib/vagrant-openstack-provider/cap/snapshot_list.rb +15 -0
- data/lib/vagrant-openstack-provider/client/domain.rb +6 -2
- data/lib/vagrant-openstack-provider/client/nova.rb +81 -3
- data/lib/vagrant-openstack-provider/plugin.rb +10 -0
- data/lib/vagrant-openstack-provider/version.rb +1 -1
- data/spec/vagrant-openstack-provider/client/nova_spec.rb +3 -2
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ee292bbda02fdc4f61b3d79ef0275edf0df7735
|
4
|
+
data.tar.gz: a0299d495eb5cb64c3d7dfc47690340ad2eb4ccf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f55aa6db29a728c9f5cd0e9940ca9b1697dc900925f5a444c1eb397b4dd1bd9d734f4c6b0f32470964ac1d56dc458a445b01049b3e7c79032595e85dc42a4db3
|
7
|
+
data.tar.gz: bf8c6aceaa67d1f65c458168191e5ec26ca1e7c4f8bb4ee00acc9e4d816306746bb22ce4d032723d65289f827fea4858baf011a61da6743a728e5b93bd420ffd
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -18,6 +18,7 @@ module VagrantPlugins
|
|
18
18
|
b2.use Message, I18n.t('vagrant_openstack.not_created')
|
19
19
|
else
|
20
20
|
b2.use(ProvisionerCleanup, :before)
|
21
|
+
b2.use SnapshotCleanup if Gem::Version.new(Vagrant::VERSION) >= Gem::Version.new('1.8.0')
|
21
22
|
b2.use DeleteServer
|
22
23
|
b2.use DeleteStack
|
23
24
|
end
|
@@ -233,6 +234,77 @@ module VagrantPlugins
|
|
233
234
|
end
|
234
235
|
end
|
235
236
|
|
237
|
+
# TODO: Remove the if guard when Vagrant 1.8.0 is the minimum version.
|
238
|
+
# rubocop:disable IndentationWidth
|
239
|
+
if Gem::Version.new(Vagrant::VERSION) >= Gem::Version.new('1.8.0')
|
240
|
+
def self.action_snapshot_delete
|
241
|
+
new_builder.tap do |b|
|
242
|
+
b.use ConfigValidate
|
243
|
+
b.use ConnectOpenstack
|
244
|
+
b.use Call, IsState, :not_created do |env, b2|
|
245
|
+
if env[:result]
|
246
|
+
b2.use Message, I18n.t('vagrant_openstack.not_created')
|
247
|
+
else
|
248
|
+
b2.use SnapshotDelete
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
def self.action_snapshot_list
|
255
|
+
new_builder.tap do |b|
|
256
|
+
b.use ConfigValidate
|
257
|
+
b.use ConnectOpenstack
|
258
|
+
b.use Call, IsState, :not_created do |env, b2|
|
259
|
+
if env[:result]
|
260
|
+
b2.use Message, I18n.t('vagrant_openstack.not_created')
|
261
|
+
else
|
262
|
+
b2.use SnapshotList
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
def self.action_snapshot_restore
|
269
|
+
new_builder.tap do |b|
|
270
|
+
b.use ConfigValidate
|
271
|
+
b.use ConnectOpenstack
|
272
|
+
b.use Call, IsState, :not_created do |env, b2|
|
273
|
+
if env[:result]
|
274
|
+
b2.use Message, I18n.t('vagrant_openstack.not_created')
|
275
|
+
next
|
276
|
+
end
|
277
|
+
|
278
|
+
b2.use SnapshotRestore
|
279
|
+
b2.use WaitForServerToBeActive
|
280
|
+
b2.use WaitForCommunicator
|
281
|
+
|
282
|
+
b2.use Call, IsEnvSet, :snapshot_delete do |env2, b3|
|
283
|
+
# Used by vagrant push/pop
|
284
|
+
b3.use action_snapshot_delete if env2[:result]
|
285
|
+
end
|
286
|
+
|
287
|
+
b2.use action_provision
|
288
|
+
end
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
def self.action_snapshot_save
|
293
|
+
new_builder.tap do |b|
|
294
|
+
b.use ConfigValidate
|
295
|
+
b.use ConnectOpenstack
|
296
|
+
b.use Call, IsState, :not_created do |env, b2|
|
297
|
+
if env[:result]
|
298
|
+
b2.use Message, I18n.t('vagrant_openstack.not_created')
|
299
|
+
else
|
300
|
+
b2.use SnapshotSave
|
301
|
+
end
|
302
|
+
end
|
303
|
+
end
|
304
|
+
end
|
305
|
+
end # Vagrant > 1.8.0 guard
|
306
|
+
# rubocop:enable IndentationWidth
|
307
|
+
|
236
308
|
# The autoload farm
|
237
309
|
action_root = Pathname.new(File.expand_path('../action', __FILE__))
|
238
310
|
autoload :Message, action_root.join('message')
|
@@ -251,6 +323,16 @@ module VagrantPlugins
|
|
251
323
|
autoload :ProvisionWrapper, action_root.join('provision')
|
252
324
|
autoload :WaitForServerToStop, action_root.join('wait_stop')
|
253
325
|
autoload :WaitForServerToBeActive, action_root.join('wait_active')
|
326
|
+
# TODO: Remove the if guard when Vagrant 1.8.0 is the minimum version.
|
327
|
+
# rubocop:disable IndentationWidth
|
328
|
+
if Gem::Version.new(Vagrant::VERSION) >= Gem::Version.new('1.8.0')
|
329
|
+
autoload :SnapshotCleanup, action_root.join('snapshot_cleanup')
|
330
|
+
autoload :SnapshotDelete, action_root.join('snapshot_delete')
|
331
|
+
autoload :SnapshotList, action_root.join('snapshot_list')
|
332
|
+
autoload :SnapshotRestore, action_root.join('snapshot_restore')
|
333
|
+
autoload :SnapshotSave, action_root.join('snapshot_save')
|
334
|
+
end
|
335
|
+
# rubocop:enable IndentationWidth
|
254
336
|
|
255
337
|
private
|
256
338
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'vagrant-openstack-provider/action/abstract_action'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Openstack
|
5
|
+
module Action
|
6
|
+
class SnapshotCleanup < AbstractAction
|
7
|
+
def initialize(app, _env)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
nova = env[:openstack_client].nova
|
13
|
+
machine_snapshots = nova.list_snapshots(env, env[:machine].id)
|
14
|
+
|
15
|
+
snapshots_to_clean = machine_snapshots.select do |s|
|
16
|
+
s.metadata.key?('vagrant_snapshot')
|
17
|
+
end
|
18
|
+
|
19
|
+
@app.call env
|
20
|
+
|
21
|
+
unless snapshots_to_clean.empty?
|
22
|
+
env[:ui].info("Deleting Vagrant snapshots: #{snapshots_to_clean.map(&:name)}")
|
23
|
+
end
|
24
|
+
|
25
|
+
snapshots_to_clean.each do |s|
|
26
|
+
nova.delete_snapshot(env, s.id)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'vagrant-openstack-provider/action/abstract_action'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Openstack
|
5
|
+
module Action
|
6
|
+
class SnapshotDelete < AbstractAction
|
7
|
+
def initialize(app, _env)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
nova = env[:openstack_client].nova
|
13
|
+
machine_snapshots = nova.list_snapshots(env, env[:machine].id)
|
14
|
+
|
15
|
+
snapshot = machine_snapshots.find { |s| s.name == env[:snapshot_name] }
|
16
|
+
|
17
|
+
unless snapshot.nil?
|
18
|
+
env[:ui].info(I18n.t('vagrant.actions.vm.snapshot.deleting',
|
19
|
+
name: snapshot.name))
|
20
|
+
|
21
|
+
nova.delete_snapshot(env, snapshot.id)
|
22
|
+
|
23
|
+
env[:ui].info(I18n.t('vagrant.actions.vm.snapshot.deleted',
|
24
|
+
name: snapshot.name))
|
25
|
+
end
|
26
|
+
|
27
|
+
@app.call env
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'vagrant-openstack-provider/action/abstract_action'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Openstack
|
5
|
+
module Action
|
6
|
+
class SnapshotList < AbstractAction
|
7
|
+
def initialize(app, _env)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
nova = env[:openstack_client].nova
|
13
|
+
machine_snapshots = nova.list_snapshots(env, env[:machine].id)
|
14
|
+
|
15
|
+
env[:machine_snapshot_list] = machine_snapshots.map(&:name)
|
16
|
+
|
17
|
+
@app.call env
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'vagrant-openstack-provider/action/abstract_action'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Openstack
|
5
|
+
module Action
|
6
|
+
class SnapshotRestore < AbstractAction
|
7
|
+
def initialize(app, _env)
|
8
|
+
@app = app
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
nova = env[:openstack_client].nova
|
13
|
+
machine_snapshots = nova.list_snapshots(env, env[:machine].id)
|
14
|
+
|
15
|
+
snapshot = machine_snapshots.find { |s| s.name == env[:snapshot_name] }
|
16
|
+
|
17
|
+
unless snapshot.nil?
|
18
|
+
env[:ui].info(I18n.t('vagrant.actions.vm.snapshot.restoring',
|
19
|
+
name: snapshot.name))
|
20
|
+
|
21
|
+
nova.restore_snapshot(env, env[:machine].id, snapshot.id)
|
22
|
+
end
|
23
|
+
|
24
|
+
@app.call env
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'vagrant-openstack-provider/action/abstract_action'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Openstack
|
5
|
+
module Action
|
6
|
+
class SnapshotSave < AbstractAction
|
7
|
+
def initialize(app, _env, retry_interval = 3)
|
8
|
+
@app = app
|
9
|
+
@retry_interval = retry_interval
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
nova = env[:openstack_client].nova
|
14
|
+
config = env[:machine].provider_config
|
15
|
+
|
16
|
+
env[:ui].info(I18n.t('vagrant.actions.vm.snapshot.saving',
|
17
|
+
name: env[:snapshot_name]))
|
18
|
+
|
19
|
+
nova.create_snapshot(
|
20
|
+
env,
|
21
|
+
env[:machine].id, env[:snapshot_name])
|
22
|
+
|
23
|
+
image = nova.list_snapshots(env, env[:machine].id).find { |i| i.name == env[:snapshot_name] }
|
24
|
+
|
25
|
+
timeout(config.server_create_timeout, Errors::Timeout) do
|
26
|
+
loop do
|
27
|
+
image_status = nova.get_image_details(env, image.id)
|
28
|
+
|
29
|
+
break if image_status['status'] == 'ACTIVE'
|
30
|
+
|
31
|
+
unless image_status['progress'].nil?
|
32
|
+
env[:ui].clear_line
|
33
|
+
env[:ui].report_progress(image_status['progress'], 100, false)
|
34
|
+
end
|
35
|
+
|
36
|
+
sleep @retry_interval
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Clear progress output.
|
41
|
+
env[:ui].clear_line
|
42
|
+
|
43
|
+
env[:ui].success(I18n.t('vagrant.actions.vm.snapshot.saved',
|
44
|
+
name: env[:snapshot_name]))
|
45
|
+
|
46
|
+
@app.call env
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Openstack
|
3
|
+
module Cap
|
4
|
+
module SnapshotList
|
5
|
+
# Returns a list of the snapshots that are taken on this machine.
|
6
|
+
#
|
7
|
+
# @return [Array<String>]
|
8
|
+
def self.snapshot_list(machine)
|
9
|
+
env = machine.action(:snapshot_list, lock: false)
|
10
|
+
env[:machine_snapshot_list]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -25,19 +25,23 @@ module VagrantPlugins
|
|
25
25
|
attr_accessor :size
|
26
26
|
attr_accessor :min_ram
|
27
27
|
attr_accessor :min_disk
|
28
|
+
attr_accessor :metadata
|
28
29
|
|
29
|
-
|
30
|
+
# rubocop:disable Metrics/ParameterLists
|
31
|
+
def initialize(id, name, visibility = nil, size = nil, min_ram = nil, min_disk = nil, metadata = {})
|
30
32
|
@visibility = visibility
|
31
33
|
@size = size
|
32
34
|
@min_ram = min_ram
|
33
35
|
@min_disk = min_disk
|
36
|
+
@metadata = metadata
|
34
37
|
super(id, name)
|
35
38
|
end
|
39
|
+
# rubocop:enable Metrics/ParameterLists
|
36
40
|
|
37
41
|
protected
|
38
42
|
|
39
43
|
def state
|
40
|
-
[@id, @name, @visibility, @size, @min_ram, @min_disk]
|
44
|
+
[@id, @name, @visibility, @size, @min_ram, @min_disk, @metadata]
|
41
45
|
end
|
42
46
|
end
|
43
47
|
|
@@ -42,9 +42,30 @@ module VagrantPlugins
|
|
42
42
|
FloatingIP.new(floating_ip['ip'], floating_ip['pool'], floating_ip['instance_id'])
|
43
43
|
end
|
44
44
|
|
45
|
-
def get_all_images(env)
|
46
|
-
images_json = get(env, "#{@session.endpoints[:compute]}/images")
|
47
|
-
JSON.parse(images_json)['images'].map
|
45
|
+
def get_all_images(env, headers = {})
|
46
|
+
images_json = get(env, "#{@session.endpoints[:compute]}/images/detail", headers)
|
47
|
+
JSON.parse(images_json)['images'].map do |fl|
|
48
|
+
Image.new(
|
49
|
+
fl['id'],
|
50
|
+
fl['name'],
|
51
|
+
'unknown',
|
52
|
+
nil,
|
53
|
+
fl['minRam'],
|
54
|
+
fl['minDisk'],
|
55
|
+
fl['metadata']
|
56
|
+
)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Get detailed information about an image
|
61
|
+
#
|
62
|
+
# @param env [Hash] Vagrant action environment
|
63
|
+
# @param image_id [String] Image UUID
|
64
|
+
#
|
65
|
+
# @return [Hash]
|
66
|
+
def get_image_details(env, image_id)
|
67
|
+
image_json = get(env, "#{@session.endpoints[:compute]}/images/#{image_id}")
|
68
|
+
JSON.parse(image_json)['image']
|
48
69
|
end
|
49
70
|
|
50
71
|
def create_server(env, options)
|
@@ -175,6 +196,63 @@ module VagrantPlugins
|
|
175
196
|
end
|
176
197
|
end
|
177
198
|
|
199
|
+
# List snapshot images associated with a particular server
|
200
|
+
#
|
201
|
+
# @param env [Hash] Vagrant action environment
|
202
|
+
# @param server_id [String] Server UUID
|
203
|
+
#
|
204
|
+
# @return [Array<VagrantPlugins::Openstack::Domain::Image>]
|
205
|
+
def list_snapshots(env, server_id)
|
206
|
+
get_all_images(env, params: { server: server_id })
|
207
|
+
end
|
208
|
+
|
209
|
+
# Create a named snapsot for a given VM
|
210
|
+
#
|
211
|
+
# @param env [Hash] Vagrant action environment
|
212
|
+
# @param server_id [String] Server UUID
|
213
|
+
# @param snapshot_name [String]
|
214
|
+
#
|
215
|
+
# @return [void]
|
216
|
+
def create_snapshot(env, server_id, snapshot_name)
|
217
|
+
instance_exists do
|
218
|
+
post(
|
219
|
+
env,
|
220
|
+
"#{@session.endpoints[:compute]}/servers/#{server_id}/action",
|
221
|
+
{ createImage: {
|
222
|
+
name: snapshot_name,
|
223
|
+
metadata: { vagrant_snapshot: 'true' }
|
224
|
+
} }.to_json)
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
# Delete an identified snapshot
|
229
|
+
#
|
230
|
+
# @param env [Hash] Vagrant action environment
|
231
|
+
# @param snapshot_id [String] Snapshot UUID
|
232
|
+
#
|
233
|
+
# @return [void]
|
234
|
+
def delete_snapshot(env, snapshot_id)
|
235
|
+
delete(
|
236
|
+
env,
|
237
|
+
"#{@session.endpoints[:compute]}/images/#{snapshot_id}")
|
238
|
+
end
|
239
|
+
|
240
|
+
# Restore a VM to an identified snapshot
|
241
|
+
#
|
242
|
+
# @param env [Hash] Vagrant action environment
|
243
|
+
# @param server_id [String] Server UUID
|
244
|
+
# @param snapshot_id [String] Snapshot UUID
|
245
|
+
#
|
246
|
+
# @return [void]
|
247
|
+
def restore_snapshot(env, server_id, snapshot_id)
|
248
|
+
instance_exists do
|
249
|
+
post(
|
250
|
+
env,
|
251
|
+
"#{@session.endpoints[:compute]}/servers/#{server_id}/action",
|
252
|
+
{ rebuild: { imageRef: snapshot_id } }.to_json)
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
178
256
|
private
|
179
257
|
|
180
258
|
VM_STATES =
|
@@ -35,6 +35,16 @@ module VagrantPlugins
|
|
35
35
|
Provider
|
36
36
|
end
|
37
37
|
|
38
|
+
# TODO: Remove the if guard when Vagrant 1.8.0 is the minimum version.
|
39
|
+
# rubocop:disable IndentationWidth
|
40
|
+
if Gem::Version.new(Vagrant::VERSION) >= Gem::Version.new('1.8.0')
|
41
|
+
provider_capability('openstack', 'snapshot_list') do
|
42
|
+
require_relative 'cap/snapshot_list'
|
43
|
+
Cap::SnapshotList
|
44
|
+
end
|
45
|
+
end
|
46
|
+
# rubocop:enable IndentationWidth
|
47
|
+
|
38
48
|
command('openstack') do
|
39
49
|
Openstack.init_i18n
|
40
50
|
Openstack.init_logging
|
@@ -101,7 +101,7 @@ describe VagrantPlugins::Openstack::NovaClient do
|
|
101
101
|
describe 'get_all_images' do
|
102
102
|
context 'with token and project_id acquainted' do
|
103
103
|
it 'returns all images' do
|
104
|
-
stub_request(:get, 'http://nova/a1b2c3/images')
|
104
|
+
stub_request(:get, 'http://nova/a1b2c3/images/detail')
|
105
105
|
.with(
|
106
106
|
headers:
|
107
107
|
{
|
@@ -110,13 +110,14 @@ describe VagrantPlugins::Openstack::NovaClient do
|
|
110
110
|
})
|
111
111
|
.to_return(
|
112
112
|
status: 200,
|
113
|
-
body: '{ "images": [ { "id": "i1", "name": "image1"}, { "id": "i2", "name": "image2"} ] }')
|
113
|
+
body: '{ "images": [ { "id": "i1", "name": "image1", "metadata": {"customVal1": 1}}, { "id": "i2", "name": "image2"} ] }')
|
114
114
|
|
115
115
|
images = @nova_client.get_all_images(env)
|
116
116
|
|
117
117
|
expect(images.length).to eq(2)
|
118
118
|
expect(images[0].id).to eq('i1')
|
119
119
|
expect(images[0].name).to eq('image1')
|
120
|
+
expect(images[0].metadata['customVal1']).to eq(1)
|
120
121
|
expect(images[1].id).to eq('i2')
|
121
122
|
expect(images[1].name).to eq('image2')
|
122
123
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-openstack-provider
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guillaume Giamarchi
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-04-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -213,12 +213,18 @@ files:
|
|
213
213
|
- lib/vagrant-openstack-provider/action/read_ssh_info.rb
|
214
214
|
- lib/vagrant-openstack-provider/action/read_state.rb
|
215
215
|
- lib/vagrant-openstack-provider/action/resume.rb
|
216
|
+
- lib/vagrant-openstack-provider/action/snapshot_cleanup.rb
|
217
|
+
- lib/vagrant-openstack-provider/action/snapshot_delete.rb
|
218
|
+
- lib/vagrant-openstack-provider/action/snapshot_list.rb
|
219
|
+
- lib/vagrant-openstack-provider/action/snapshot_restore.rb
|
220
|
+
- lib/vagrant-openstack-provider/action/snapshot_save.rb
|
216
221
|
- lib/vagrant-openstack-provider/action/start_server.rb
|
217
222
|
- lib/vagrant-openstack-provider/action/stop_server.rb
|
218
223
|
- lib/vagrant-openstack-provider/action/suspend.rb
|
219
224
|
- lib/vagrant-openstack-provider/action/sync_folders.rb
|
220
225
|
- lib/vagrant-openstack-provider/action/wait_active.rb
|
221
226
|
- lib/vagrant-openstack-provider/action/wait_stop.rb
|
227
|
+
- lib/vagrant-openstack-provider/cap/snapshot_list.rb
|
222
228
|
- lib/vagrant-openstack-provider/catalog/openstack_catalog.rb
|
223
229
|
- lib/vagrant-openstack-provider/client/cinder.rb
|
224
230
|
- lib/vagrant-openstack-provider/client/domain.rb
|