class VagrantPlugins::SyncedFolder9p::SyncedFolder

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/vagrant-libvirt/cap/synced_folder.rb, line 17
def initialize(*args)
  super

  @logger = Log4r::Logger.new("vagrant_libvirt::synced_folders::9p")
end

Public Instance Methods

cleanup(machine, _opts) click to toggle source
# File lib/vagrant-libvirt/cap/synced_folder.rb, line 79
def cleanup(machine, _opts)

  raise Vagrant::Errors::Error("No libvirt connection") if ProviderLibvirt.libvirt_connection.nil?

  @conn = ProviderLibvirt.libvirt_connection.client
 
  begin
    if machine.id && machine.id != ""
      dom = @conn.lookup_domain_by_uuid(machine.id)
      Nokogiri::XML(dom.xml_desc).xpath('/domain/devices/filesystem').each do |xml|
        dom.detach_device(xml.to_s)

        machine.ui.info "Cleaned up shared folders"
      end
    end
  rescue => e
    machine.ui.error("could not detach device because: #{e}")
    raise VagrantPlugins::ProviderLibvirt::Errors::DetachDeviceError,:error_message => e.message
  end

end
enable(machine, folders, _opts) click to toggle source

TODO once up, mount folders

# File lib/vagrant-libvirt/cap/synced_folder.rb, line 63
def enable(machine, folders, _opts)
  # Go through each folder and mount
  machine.ui.info("mounting p9 share in guest")
  # Only mount folders that have a guest path specified.
  mount_folders = {}
  folders.each do |id, opts|
    mount_folders[id] = opts.dup if opts[:guestpath]
  end
  common_opts = {
    :version => '9p2000.L',
  }
  # Mount the actual folder
  machine.guest.capability(
      :mount_p9_shared_folder, mount_folders, common_opts)
end
prepare(machine, folders, opts) click to toggle source
# File lib/vagrant-libvirt/cap/synced_folder.rb, line 37
def prepare(machine, folders, opts)
  
  raise Vagrant::Errors::Error("No libvirt connection") if ProviderLibvirt.libvirt_connection.nil?

  @conn = ProviderLibvirt.libvirt_connection.client

  begin
    # loop through folders
    folders.each do |id, folder_opts|
      folder_opts.merge!({ :accessmode => "passthrough",
                          :readonly => nil })
      machine.ui.info "================\nMachine id: #{machine.id}\nShould be mounting folders\n #{id}, opts: #{folder_opts}"

      xml =  to_xml('filesystem', folder_opts )
      # puts "<<<<< XML:\n #{xml}\n >>>>>"
      @conn.lookup_domain_by_uuid(machine.id).attach_device(xml, 0)

    end 
  rescue => e
    machine.ui.error("could not attach device because: #{e}")
    raise VagrantPlugins::ProviderLibvirt::Errors::AttachDeviceError,:error_message => e.message
  end
end
usable?(machine, raise_error=false) click to toggle source
# File lib/vagrant-libvirt/cap/synced_folder.rb, line 23
def usable?(machine, raise_error=false)
  # bail now if not using libvirt since checking version would throw error
  return false unless machine.provider_name == :libvirt

  # <filesystem/> support in device attach/detach introduced in 1.2.2
  # version number format is major * 1,000,000 + minor * 1,000 + release
  libvirt_version = ProviderLibvirt.libvirt_connection.client.libversion
  if libvirt_version >= 1002002
    return true
  else
    return false
  end
end