class Specinfra::Backend::Telnet

Public Instance Methods

build_command(cmd) click to toggle source
Calls superclass method Specinfra::Backend::Exec#build_command
# File lib/specinfra/backend/telnet.rb, line 21
def build_command(cmd)
  cmd = super(cmd)
  cmd
end
run_command(cmd, opt={}) click to toggle source
# File lib/specinfra/backend/telnet.rb, line 7
def run_command(cmd, opt={})
  cmd = build_command(cmd)
  cmd = add_pre_command(cmd)
  ret = with_env do
    telnet_exec!(cmd)
  end
  if @example
    @example.metadata[:command] = cmd
    @example.metadata[:stdout]  = ret[:stdout]
  end

  CommandResult.new ret
end

Private Instance Methods

add_pre_command(cmd) click to toggle source
# File lib/specinfra/backend/telnet.rb, line 49
def add_pre_command(cmd)
  if get_config(:pre_command)
    pre_cmd = build_command(get_config(:pre_command))
    "#{pre_cmd} && #{cmd}"
  else
    cmd
  end
end
create_telnet() click to toggle source
# File lib/specinfra/backend/telnet.rb, line 77
def create_telnet
  tel = Net::Telnet.new( "Host" => get_config(:host) )
  tel.login( 
    "Name" => get_config(:telnet_options)[:user], 
    "Password" => get_config(:telnet_options)[:pass]
  )
  tel
rescue
  return nil
end
prompt() click to toggle source
# File lib/specinfra/backend/telnet.rb, line 27
def prompt
  'Login: '
end
sudo() click to toggle source
# File lib/specinfra/backend/telnet.rb, line 88
def sudo
  if sudo_path = get_config(:sudo_path)
    sudo_path += '/sudo'
  else
    sudo_path = 'sudo'
  end

  sudo_options = get_config(:sudo_options)
  if sudo_options
    sudo_options = sudo_options.shelljoin if sudo_options.is_a?(Array)
    sudo_options = ' ' + sudo_options
  end

  "#{sudo_path.shellescape}#{sudo_options}"
end
sudo?() click to toggle source
# File lib/specinfra/backend/telnet.rb, line 104
def sudo?
  false
end
telnet_exec!( command ) click to toggle source
# File lib/specinfra/backend/telnet.rb, line 58
def telnet_exec!( command )
  stdout_data = ''
  stderr_data = ''
  exit_status = nil
  exit_signal = nil
  retry_prompt = /^Login: /
  if get_config(:telnet).nil?
    set_config(:telnet, create_telnet)
  end
  telnet = get_config(:telnet)
  re = [] 
  unless telnet.nil?
    re = telnet.cmd( "#{command}; echo $?" ).split("\n")[0..-2]
    exit_status = re.last.to_i
    stdout_data = re[1..-2].join("\n")
  end
  { :stdout => stdout_data, :stderr => stderr_data, :exit_status => exit_status, :exit_signal => exit_signal }
end
with_env() { || ... } click to toggle source
# File lib/specinfra/backend/telnet.rb, line 31
def with_env
  env = get_config(:env) || {}
  env[:LANG] ||= 'C'

  env.each do |key, value|
    key = key.to_s
    ENV["_SPECINFRA_#{key}"] = ENV[key];
    ENV[key] = value
  end

  yield
ensure
  env.each do |key, value|
    key = key.to_s
    ENV[key] = ENV.delete("_SPECINFRA_#{key}");
  end
end