class VagrantPlugins::ProviderLibvirt::Action::ClearForwardedPorts
Cleans up ssh-forwarded ports on VM halt/destroy.
Public Class Methods
new(app, _env)
click to toggle source
# File lib/vagrant-libvirt/action/forward_ports.rb, line 163 def initialize(app, _env) @app = app @logger = Log4r::Logger.new( 'vagrant_libvirt::action::clear_forward_ports' ) end
Public Instance Methods
call(env)
click to toggle source
# File lib/vagrant-libvirt/action/forward_ports.rb, line 170 def call(env) @env = env if ssh_pids.any? env[:ui].info I18n.t( 'vagrant.actions.vm.clear_forward_ports.deleting' ) ssh_pids.each do |tag| next unless ssh_pid?(tag[:pid]) @logger.debug "Killing pid #{tag[:pid]}" kill_cmd = '' if tag[:port] <= 1024 kill_cmd << 'sudo ' # add sudo prefix end kill_cmd << "kill #{tag[:pid]}" @@lock.synchronize do system(kill_cmd) end end @logger.info 'Removing ssh pid files' remove_ssh_pids else @logger.info 'No ssh pids found' end @app.call env end
Protected Instance Methods
remove_ssh_pids()
click to toggle source
# File lib/vagrant-libvirt/action/forward_ports.rb, line 219 def remove_ssh_pids glob = @env[:machine].data_dir.join('pids').to_s + '/ssh_*.pid' Dir[glob].each do |file| File.delete file end end
ssh_pid?(pid)
click to toggle source
# File lib/vagrant-libvirt/action/forward_ports.rb, line 213 def ssh_pid?(pid) @logger.debug "Checking if #{pid} is an ssh process "\ "with `ps -o command= #{pid}`" `ps -o command= #{pid}`.strip.chomp =~ /ssh/ end
ssh_pids()
click to toggle source
# File lib/vagrant-libvirt/action/forward_ports.rb, line 203 def ssh_pids glob = @env[:machine].data_dir.join('pids').to_s + '/ssh_*.pid' @ssh_pids = Dir[glob].map do |file| { pid: File.read(file).strip.chomp, port: File.basename(file)['ssh_'.length..-1 * ('.pid'.length + 1)].to_i } end end