Class: QemuToolkit::LocalDiskSet

Inherits:
Object
  • Object
show all
Defined in:
lib/qemu-toolkit/local_disk_set.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, disks) ⇒ LocalDiskSet

Returns a new instance of LocalDiskSet.



26
27
28
29
# File 'lib/qemu-toolkit/local_disk_set.rb', line 26

def initialize(name, disks)
  @name = name
  @disks = disks
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



31
32
33
# File 'lib/qemu-toolkit/local_disk_set.rb', line 31

def name
  @name
end

Class Method Details

.for(name, backend) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/qemu-toolkit/local_disk_set.rb', line 4

def self.for(name, backend)
  output = backend.zfs :list, "-oname,#{QemuToolkit::EXPORT_TAG} -H"
  candidates = output.lines.map { |l| l.chomp.strip.split }
  candidates.reject! { |n,_| ! n }
  
  # Finds all qemu-toolkit storage spaces that end in '/name':
  # Output from this step are only the spaces that match
  storage_spaces = candidates.
    select { |cand_name, flag| 
      %w(true false).include?(flag) && cand_name.end_with?('/'+name) }

  # Finds all disks for each of the candidate exports: 
  # Output from this step should be <name, disks> tuples
  storage_spaces.
    map { |base_name, _| new(
      base_name, 
      candidates.map(&:first).
        select { |name| 
          
          name.match(/#{Regexp.escape(base_name)}\/disk\d+/) } ) }
end

Instance Method Details

#each_diskObject



33
34
35
36
37
# File 'lib/qemu-toolkit/local_disk_set.rb', line 33

def each_disk
  @disks.sort.each do |path|
    yield "/dev/zvol/rdsk/#{path}"
  end
end