class Hookit::Resource::Zfs

Public Class Methods

new(name) click to toggle source
Calls superclass method Hookit::Resource::Base::new
# File lib/hookit/resource/zfs.rb, line 16
def initialize(name)
  snapshot(name) unless snapshot
  super
end

Public Instance Methods

clone!() click to toggle source
# File lib/hookit/resource/zfs.rb, line 72
def clone!
  run_command! "zfs clone #{snapshot} #{dataset}"
end
destroy!() click to toggle source
# File lib/hookit/resource/zfs.rb, line 61
def destroy!
  `zfs list -t snapshot | grep #{snapshot}`
  if $?.exitstatus == 0
    run_command! "zfs destroy #{snapshot}"
  end 
end
receive!() click to toggle source
# File lib/hookit/resource/zfs.rb, line 44
def receive!
  run_command! "#{source.to_s.strip} | zfs receive -F #{dataset}"
end
rollback!() click to toggle source
# File lib/hookit/resource/zfs.rb, line 68
def rollback!
  run_command! "zfs rollback -r #{snapshot}"
end
run(action) click to toggle source
# File lib/hookit/resource/zfs.rb, line 21
def run(action)
  case action
  when :send
    send!
  when :receive
    receive!
  when :transmit
    transmit!
  when :snapshot
    snapshot!
  when :destroy
    destroy!
  when :rollback
    rollback!
  when :clone
    clone!
  end
end
run_command!(cmd, expect_code=0) click to toggle source
# File lib/hookit/resource/zfs.rb, line 88
def run_command!(cmd, expect_code=0)
  res = `#{cmd}`
  code = $?.exitstatus
  if code != expect_code
    raise Hookit::Error::UnexpectedExit, "#{cmd} failed with exit code '#{code}'"
  end
  return validate!(res)
end
send!() click to toggle source
# File lib/hookit/resource/zfs.rb, line 40
def send!
  run_command! "zfs send #{snapshot} | #{destination}"
end
snapshot!() click to toggle source
# File lib/hookit/resource/zfs.rb, line 56
def snapshot!
  destroy!
  run_command! "zfs snapshot #{snapshot}"
end
transmit!() click to toggle source
# File lib/hookit/resource/zfs.rb, line 48
def transmit!
  if ssh_host
    run_command! "zfs send #{options} #{snapshot} | ssh -o stricthostkeychecking=no #{ssh_host} zfs receive -F #{dataset}"
  else
    run_command! "zfs send #{options} #{snapshot} | zfs receive -F #{dataset}"
  end
end
validate!(res) click to toggle source
# File lib/hookit/resource/zfs.rb, line 76
def validate!(res)
  if validator.is_a? Proc
    if validator.call(res)
      res
    else
      raise "ERROR: execute resource \"#{name}\" failed validation!"
    end
  else
    res
  end
end