class NixAdm::ZFS::ZfsEntity
Attributes
host[R]
pool[R]
Public Class Methods
new(host, pool, name)
click to toggle source
Calls superclass method
NixAdm::ZFS::Object::new
# File src/lib/nixadm/zfs.rb, line 221 def initialize(host, pool, name) super host, name if pool.is_a?(Pool) == false raise 'Second argument must be pool' end @pool = pool end
Public Instance Methods
createSnapshot(id=nil)
click to toggle source
Creates a snapshot using epoch time as name
# File src/lib/nixadm/zfs.rb, line 313 def createSnapshot(id=nil) name = newSnapshotName(id) command = @host.resolveCommand("zfs snapshot #{name}") if @host.run(command) == false raise "Failed to create snapshot #{name}" end return name.split('@')[1].to_i end
deleteAllSnapshots()
click to toggle source
# File src/lib/nixadm/zfs.rb, line 333 def deleteAllSnapshots() snapshotIds().each do |id| if deleteSnapshot(id) == false return status() end end return success() end
deleteSnapshot(id)
click to toggle source
# File src/lib/nixadm/zfs.rb, line 324 def deleteSnapshot(id) name = snapshotName(id) command = @host.resolveCommand("zfs destroy #{name}") if @host.run(command) == false raise "Failed to create snapshot #{name}" end end
lastSnapshot()
click to toggle source
# File src/lib/nixadm/zfs.rb, line 283 def lastSnapshot() id = lastSnapshotId() return nil if id.nil? return snapshot(id) end
lastSnapshotId()
click to toggle source
# File src/lib/nixadm/zfs.rb, line 279 def lastSnapshotId() return snapshotIds()[-1] end
latestMatchingSnapshotId(ids)
click to toggle source
Given a set of snapshots in order, returns the most recent match if one exists.
# File src/lib/nixadm/zfs.rb, line 354 def latestMatchingSnapshotId(ids) my_ids = snapshotIds() ids.reverse_each do |id| if my_ids.include?(id) return id end end return nil end
previousSnapshotId(id)
click to toggle source
# File src/lib/nixadm/zfs.rb, line 300 def previousSnapshotId(id) ids = snapshotIds() prev = nil ids.each do |x| if x == id return prev end prev = x end end
snapshot(id)
click to toggle source
# File src/lib/nixadm/zfs.rb, line 231 def snapshot(id) snap_names = snapshotNames() snap_names.each do |name| if name.split('@')[1].to_i == id return snapshotInstance(name) end end return nil end
snapshotIds()
click to toggle source
# File src/lib/nixadm/zfs.rb, line 265 def snapshotIds() snaps = snapshotNames() # We assume that relavant snapshot names are numerical values (epoch # times). Any name containing alpha characters will be reduced to 0 by # to_i(). ids = snaps.collect { |s| s.split('@')[1].to_i } # Filter out the zero integer value entries, if any ids.select! { |s| s > 0 } return ids.sort end
snapshotInstance(name)
click to toggle source
Makes testing easier
# File src/lib/nixadm/zfs.rb, line 296 def snapshotInstance(name) return Snapshot.new(self, name) end
snapshotName(ss)
click to toggle source
# File src/lib/nixadm/zfs.rb, line 291 def snapshotName(ss) return "#{@pool.name}/#{@name}@#{ss}" end
snapshotNames()
click to toggle source
Convert snapshot integers to full names
# File src/lib/nixadm/zfs.rb, line 261 def snapshotNames() return filterSnapshots(fetchSnapshots()) end
snapshots() { |snapshot| ... }
click to toggle source
# File src/lib/nixadm/zfs.rb, line 243 def snapshots() snap_names = snapshotNames() objects = [] snap_names.each do |name| snapshot = snapshotInstance(name) if block_given? yield snapshot else objects << snapshot end end return objects end
trimSnapshots()
click to toggle source
Delete all except the most recent snapshot
# File src/lib/nixadm/zfs.rb, line 344 def trimSnapshots() snapshotIds()[0..-2].each do |id| deleteSnapshot(id) end return success() end
Private Instance Methods
fetchSnapshots()
click to toggle source
# File src/lib/nixadm/zfs.rb, line 367 def fetchSnapshots() return @pool.objects('snapshot') end
filterSnapshots(data)
click to toggle source
# File src/lib/nixadm/zfs.rb, line 379 def filterSnapshots(data) filter = [] data.each do |entry| fs = entry[:name].split('/')[1..-1].join('/') if fs.match(/^#{@name}@/) != nil filter << fs end end return filter end
newSnapshotName(id=nil)
click to toggle source
# File src/lib/nixadm/zfs.rb, line 371 def newSnapshotName(id=nil) if not id.nil? return "#{@pool.name}/#{@name}@#{id}" end return "#{@pool.name}/#{@name}@#{Time.now.to_i}" end