class VagrantPlugins::ProviderLibvirt::Action::PrepareNFSSettings
Public Class Methods
new(app,env)
click to toggle source
# File lib/vagrant-libvirt/action/prepare_nfs_settings.rb, line 11 def initialize(app,env) @app = app @logger = Log4r::Logger.new("vagrant::action::vm::nfs") end
Public Instance Methods
call(env)
click to toggle source
# File lib/vagrant-libvirt/action/prepare_nfs_settings.rb, line 16 def call(env) @machine = env[:machine] @app.call(env) if using_nfs? @logger.info("Using NFS, preparing NFS settings by reading host IP and machine IP") env[:nfs_machine_ip] = read_machine_ip(env[:machine]) env[:nfs_host_ip] = read_host_ip(env[:nfs_machine_ip]) @logger.info("host IP: #{env[:nfs_host_ip]} machine IP: #{env[:nfs_machine_ip]}") raise Vagrant::Errors::NFSNoHostonlyNetwork if !env[:nfs_machine_ip] || !env[:nfs_host_ip] end end
read_host_ip(ip)
click to toggle source
Returns the IP address of the host
@param [Machine] machine @return [String]
# File lib/vagrant-libvirt/action/prepare_nfs_settings.rb, line 42 def read_host_ip(ip) UDPSocket.open do |s| s.connect(ip, 1) s.addr.last end end
read_machine_ip(machine)
click to toggle source
Returns the IP address of the guest
@param [Machine] machine @return [String]
# File lib/vagrant-libvirt/action/prepare_nfs_settings.rb, line 53 def read_machine_ip(machine) # check host only ip ssh_host = machine.ssh_info[:host] return ssh_host if ping(ssh_host) # check other ips command = "ip addr show | grep -i 'inet ' | grep -v '127.0.0.1' | tr -s ' ' | cut -d' ' -f3 | cut -d'/' -f 1" result = "" machine.communicate.execute(command) do |type, data| result << data if type == :stdout end ips = result.chomp.split("\n") @logger.info("guest IPs: #{ips.join(', ')}") ips.each do |ip| next if ip == ssh_host return ip if ping(ip) end end
using_nfs?()
click to toggle source
We're using NFS if we have any synced folder with NFS configured. If we are not using NFS we don't need to do the extra work to populate these fields in the environment.
# File lib/vagrant-libvirt/action/prepare_nfs_settings.rb, line 34 def using_nfs? !!synced_folders(@machine)[:nfs] end
Private Instance Methods
ping(host, timeout = 3)
click to toggle source
Check if we can open a connection to the host
# File lib/vagrant-libvirt/action/prepare_nfs_settings.rb, line 76 def ping(host, timeout = 3) timeout(timeout) do s = TCPSocket.new(host, 'echo') s.close end true rescue Errno::ECONNREFUSED true rescue Timeout::Error, StandardError false end