Class: VagrantPlugins::ProviderLibvirt::Action::PrepareNFSSettings
- Inherits:
-
Object
- Object
- VagrantPlugins::ProviderLibvirt::Action::PrepareNFSSettings
- Includes:
- Vagrant::Action::Builtin::MixinSyncedFolders
- Defined in:
- lib/vagrant-libvirt/action/prepare_nfs_settings.rb
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, _env) ⇒ PrepareNFSSettings
constructor
A new instance of PrepareNFSSettings.
-
#read_host_ip(ip) ⇒ String
Returns the IP address of the host.
-
#read_machine_ip(machine) ⇒ String
Returns the IP address of the guest.
-
#using_nfs? ⇒ Boolean
We’re using NFS if we have any synced folder with NFS configured.
Constructor Details
#initialize(app, _env) ⇒ PrepareNFSSettings
Returns a new instance of PrepareNFSSettings.
11 12 13 14 |
# 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 |
Instance Method Details
#call(env) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# 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) ⇒ String
Returns the IP address of the host
42 43 44 45 46 47 48 49 50 51 |
# File 'lib/vagrant-libvirt/action/prepare_nfs_settings.rb', line 42 def read_host_ip(ip) UDPSocket.open do |s| if ip.is_a?(Array) s.connect(ip.last, 1) else s.connect(ip, 1) end s.addr.last end end |
#read_machine_ip(machine) ⇒ String
Returns the IP address of the guest
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/vagrant-libvirt/action/prepare_nfs_settings.rb', line 57 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=$(which ip); ${ip:-/sbin/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").uniq @logger.info("guest IPs: #{ips.join(', ')}") ips.each do |ip| next if ip == ssh_host return ip if ping(ip) end end |
#using_nfs? ⇒ Boolean
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.
34 35 36 |
# File 'lib/vagrant-libvirt/action/prepare_nfs_settings.rb', line 34 def using_nfs? !!synced_folders(@machine)[:nfs] end |