Class: Kitchen::Driver::Openstack::Volume

Inherits:
Object
  • Object
show all
Defined in:
lib/kitchen/driver/openstack/volume.rb

Overview

A class to allow the Kitchen Openstack driver to use Openstack volumes

Author:

Instance Method Summary collapse

Instance Method Details

#create_volume(config, os) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/kitchen/driver/openstack/volume.rb', line 41

def create_volume(config, os)
  opt = {}
  bdm = config[:block_device_mapping]
  vanilla_options = [:snapshot_id, :imageRef, :volume_type,
                     :source_volid, :availability_zone]
  vanilla_options.select { |o| bdm[o] }.each do |key|
    opt[key] = bdm[key]
  end
  resp = volume(os).create_volume("#{config[:server_name]}-volume",
                                  "#{config[:server_name]} volume",
                                  bdm[:volume_size],
                                  opt)
  vol_id = resp[:body]['volume']['id']
  sleep(1) until volume_ready?(vol_id, os)
  vol_id
end

#get_bdm(config, os) ⇒ Object



58
59
60
61
62
63
64
# File 'lib/kitchen/driver/openstack/volume.rb', line 58

def get_bdm(config, os)
  bdm = config[:block_device_mapping]
  bdm[:volume_id] = create_volume(config, os) if bdm[:make_volume]
  bdm.delete_if { |k, _| k == :make_volume }
  bdm.delete_if { |k, _| k == :snapshot_id }
  bdm
end

#volume(openstack_server) ⇒ Object



30
31
32
# File 'lib/kitchen/driver/openstack/volume.rb', line 30

def volume(openstack_server)
  Fog::Volume.new(openstack_server)
end

#volume_ready?(vol_id, os) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
37
38
39
# File 'lib/kitchen/driver/openstack/volume.rb', line 34

def volume_ready?(vol_id, os)
  resp = volume(os).get_volume_details(vol_id)
  status = resp[:body]['volume']['status']
  fail "Failed to make volume <#{vol_id}>" if status == 'error'
  status == 'available'
end