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 16
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 69
def cleanup(machine, _opts)
  if ProviderLibvirt.libvirt_connection.nil?
    raise Vagrant::Errors::Error('No libvirt connection')
  end
  @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 54
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]
    # merge common options if not given
    mount_folders[id].merge!(version: '9p2000.L') { |_k, ov, _nv| ov }
  end
  # Mount the actual folder
  machine.guest.capability(
      :mount_p9_shared_folder, mount_folders)
end
prepare(machine, folders, _opts) click to toggle source
# File lib/vagrant-libvirt/cap/synced_folder.rb, line 31
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!({  target: id,
                            accessmode: 'passthrough',
                            readonly: nil }) { |_k, ov, _nv| ov }
      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 21
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
  libvirt_version >= 1_002_002
end