Class: Lxc::Storage::VirtualDevice

Inherits:
Object
  • Object
show all
Includes:
Helpers
Defined in:
lib/elecksee/storage/virtual_device.rb

Overview

Virtual device backed storage

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Helpers

#child_process_command, #detect_home, #log, #mixlib_shellout_command, #run_command, #sudo

Constructor Details

#initialize(name, args = {}) ⇒ VirtualDevice

Create new instance

Parameters:

  • name (String)

    generally container name

  • args (Hash) (defaults to: {})

Options Hash (args):

  • :tmp_dir (String)

    temporary directory

  • :size (Integer)

    size of device

  • :fs_type (String)

    file system to format

  • :tmp_fs (TrueClass, FalseClass)


29
30
31
32
33
34
35
36
37
# File 'lib/elecksee/storage/virtual_device.rb', line 29

def initialize(name, args={})
  @name = name
  @tmp_dir = args[:tmp_dir] || '/tmp/lxc/ephemerals'
  @size = args[:size] || 2000
  @fs_type = args[:fs_type] || 'ext4'
  @tmp_fs = !!args[:tmp_fs]
  @fs_type = 'tmpfs' if @tmp_fs
  create
end

Instance Attribute Details

#fs_typeString (readonly)

Returns file system to format (defaults ext4).

Returns:

  • (String)

    file system to format (defaults ext4)



19
20
21
# File 'lib/elecksee/storage/virtual_device.rb', line 19

def fs_type
  @fs_type
end

#nameString (readonly)

Returns storage name (usually container name).

Returns:

  • (String)

    storage name (usually container name)



11
12
13
# File 'lib/elecksee/storage/virtual_device.rb', line 11

def name
  @name
end

#sizeInteger (readonly)

Returns device size.

Returns:

  • (Integer)

    device size



15
16
17
# File 'lib/elecksee/storage/virtual_device.rb', line 15

def size
  @size
end

#tmp_dirString (readonly)

Returns path to temporary directory.

Returns:

  • (String)

    path to temporary directory



13
14
15
# File 'lib/elecksee/storage/virtual_device.rb', line 13

def tmp_dir
  @tmp_dir
end

#tmp_fsTrueClass, FalseClass (readonly)

Returns use tmpfs.

Returns:

  • (TrueClass, FalseClass)

    use tmpfs



17
18
19
# File 'lib/elecksee/storage/virtual_device.rb', line 17

def tmp_fs
  @tmp_fs
end

Instance Method Details

#createTrueClass, FalseClass

Create the storage

Returns:

  • (TrueClass, FalseClass)


53
54
55
56
57
58
59
60
61
62
# File 'lib/elecksee/storage/virtual_device.rb', line 53

def create
  make_directories!
  unless(tmp_fs)
    command("dd if=/dev/zero of=#{@device_path} bs=1k seek=#{sive}k count=1 > /dev/null")
    command("echo \"y\" | mkfs -t #{fs_type} #{size} > /dev/null")
    true
  else
    false
  end
end

#destroyTrueClass

Destroy the storage device

Returns:

  • (TrueClass)


92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/elecksee/storage/virtual_device.rb', line 92

def destroy
  unmount
  unless(device_path == :none)
    File.delete(device_path) if File.file?(device_path)
    FileUtils.rm_rf(device_path) if File.directory?(device_path)
  end
  unless(mount_path == :none)
    if(File.directory?(mount_path))
      FileUtils.rmdir(mount_path)
    end
  end
  true
end

#device_pathString

Returns path to device.

Returns:

  • (String)

    path to device



40
41
42
# File 'lib/elecksee/storage/virtual_device.rb', line 40

def device_path
  tmp_fs ? :none : File.join(tmp_dir, 'virt-imgs', name)
end

#mountTrueClass, FalseClass

Returns mount device.

Returns:

  • (TrueClass, FalseClass)

    mount device



70
71
72
73
74
75
76
77
# File 'lib/elecksee/storage/virtual_device.rb', line 70

def mount
  unless(mounted?)
    command("mount -t #{fs_type}#{mount_options} #{device_path} #{mount_path}", :sudo => true)
    true
  else
    false
  end
end

#mount_pathString Also known as: target_path

Returns path to mount.

Returns:

  • (String)

    path to mount



45
46
47
# File 'lib/elecksee/storage/virtual_device.rb', line 45

def mount_path
  File.join(tmp_dir, 'virt-mnts', name)
end

#mounted?TrueClass, FalseClass

Returns device currently mounted.

Returns:

  • (TrueClass, FalseClass)

    device currently mounted



65
66
67
# File 'lib/elecksee/storage/virtual_device.rb', line 65

def mounted?
  command("mount").stdout.include?(mount_path)
end

#unmountTrueClass, FalseClass

Returns unmount device.

Returns:

  • (TrueClass, FalseClass)

    unmount device



80
81
82
83
84
85
86
87
# File 'lib/elecksee/storage/virtual_device.rb', line 80

def unmount
  if(mounted?)
    command("umount #{mount_path}", :sudo => true)
    true
  else
    false
  end
end