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