Class: VagrantPlugins::SyncedFolder9p::SyncedFolder
- Inherits:
-
Object
- Object
- VagrantPlugins::SyncedFolder9p::SyncedFolder
- Includes:
- Vagrant::Util, ProviderLibvirt::Util::ErbTemplate
- Defined in:
- lib/vagrant-libvirt/cap/synced_folder.rb
Instance Method Summary collapse
- #cleanup(machine, _opts) ⇒ Object
-
#enable(machine, folders, _opts) ⇒ Object
TODO once up, mount folders.
-
#initialize(*args) ⇒ SyncedFolder
constructor
A new instance of SyncedFolder.
- #prepare(machine, folders, _opts) ⇒ Object
- #usable?(machine, raise_error = false) ⇒ Boolean
Methods included from ProviderLibvirt::Util::ErbTemplate
Constructor Details
#initialize(*args) ⇒ SyncedFolder
Returns a new instance of SyncedFolder.
17 18 19 20 |
# File 'lib/vagrant-libvirt/cap/synced_folder.rb', line 17 def initialize(*args) super @logger = Log4r::Logger.new('vagrant_libvirt::synced_folders::9p') end |
Instance Method Details
#cleanup(machine, _opts) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/vagrant-libvirt/cap/synced_folder.rb', line 75 def cleanup(machine, _opts) if machine.provider.driver.connection.nil? raise Vagrant::Errors::Error('No libvirt connection') end @conn = machine.provider.driver.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. end end |
#enable(machine, folders, _opts) ⇒ Object
TODO once up, mount folders
60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/vagrant-libvirt/cap/synced_folder.rb', line 60 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) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/vagrant-libvirt/cap/synced_folder.rb', line 32 def prepare(machine, folders, _opts) raise Vagrant::Errors::Error('No libvirt connection') if machine.provider.driver.connection.nil? @conn = machine.provider.driver.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 } mount_tag = Digest::MD5.new.update(folder_opts[:hostpath]).to_s[0,31] folder_opts[:mount_tag] = mount_tag 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. end end |
#usable?(machine, raise_error = false) ⇒ Boolean
22 23 24 25 26 27 28 29 30 |
# File 'lib/vagrant-libvirt/cap/synced_folder.rb', line 22 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 = machine.provider.driver.connection.client.libversion libvirt_version >= 1_002_002 end |