class NodeSpec::CommunicationAdapters::Vagrant
Public Class Methods
communicator_for(node_name, options = {})
click to toggle source
# File lib/nodespec/communication_adapters/vagrant.rb, line 7 def self.communicator_for(node_name, options = {}) vm_name = options['vm_name'] || node_name fetch_connection_details(vm_name) do |host, opts| SshCommunicator.new(host, opts) end end
Private Class Methods
fetch_connection_details(vm_name) { |parse_ssh_config_data(output)| ... }
click to toggle source
# File lib/nodespec/communication_adapters/vagrant.rb, line 16 def self.fetch_connection_details(vm_name) cmd = "vagrant --machine-readable ssh-config #{vm_name}" output, status = Open3.capture2e(cmd) raise parse_error_data(output) unless status.success? yield(parse_ssh_config_data(output)) if block_given? end
parse_error_data(data)
click to toggle source
# File lib/nodespec/communication_adapters/vagrant.rb, line 31 def self.parse_error_data(data) /^.*,error-exit,(?<error>.*)$/ =~ data error end
parse_ssh_config_data(data)
click to toggle source
# File lib/nodespec/communication_adapters/vagrant.rb, line 23 def self.parse_ssh_config_data(data) /^\s*HostName\s+(?<hostname>.*)$/ =~ data /^\s*Port\s+(?<port>\d+)$/ =~ data /^\s*User\s+(?<username>.*)$/ =~ data /^\s*IdentityFile\s+(?<private_key_path>.*)$/ =~ data [hostname, {'port' => port.to_i, 'user' => username, 'keys' => private_key_path}] end