class Escualo::Session

Attributes

options[RW]

Public Class Methods

new(options=struct) click to toggle source
# File lib/escualo/session.rb, line 6
def initialize(options=struct)
  @options = options
end
parse_session_options(options) click to toggle source
# File lib/escualo/session/within.rb, line 2
def self.parse_session_options(options)
  struct username: options.username || 'root',
         hostname: options.hostname || 'localhost',
         ssh_options: {
             keys: [options.ssh_key].compact,
             port: options.ssh_port || 22
         },
         verbose: options.verbose,
         local: options.hostname.blank? && options.username.blank? && options.ssh_key.blank? && options.ssh_port.blank?,
         dockerized: options.dockerized,
         unoptimized_dockerfile: options.unoptimized_dockerfile

end
set_command(key, value) click to toggle source
# File lib/escualo/session.rb, line 32
def self.set_command(key, value)
  "echo export #{key}=#{value} > ~/.escualo/vars/#{key}"
end
within(options, force_local=false, &block) click to toggle source
# File lib/escualo/session/within.rb, line 16
def self.within(options, force_local=false, &block)
  session_options = parse_session_options options

  if session_options.dockerized
    within_dockerized_session session_options, options, &block
  elsif session_options.local || force_local
    block.call(Escualo::Session::Local.new session_options)
  else
    within_ssh_session(session_options, &block)
  end
end
within_dockerized_session(session_options, options, &block) click to toggle source
# File lib/escualo/session/within.rb, line 28
def self.within_dockerized_session(session_options, options, &block)
  session = Escualo::Session::Docker.new session_options
  session.start! options
  block.call(session)
  session.finish! options
end
within_ssh_session(session_options, &block) click to toggle source
# File lib/escualo/session/within.rb, line 35
def self.within_ssh_session(session_options, &block)
  Net::SSH.start(
      session_options.hostname,
      session_options.username,
      session_options.ssh_options) do |ssh|
    block.call(Escualo::Session::Remote.new ssh, session_options)
  end
end

Public Instance Methods

check?(command, include) click to toggle source
# File lib/escualo/session.rb, line 10
def check?(command, include)
  ask(command).include? include rescue false
end
clean_environment_variables!() click to toggle source
# File lib/escualo/session/environment.rb, line 3
def clean_environment_variables!
  tell! Escualo::Env.clean_command
end
set_environment_variables!(variables) click to toggle source
# File lib/escualo/session/environment.rb, line 15
def set_environment_variables!(variables)
  tell_all! *variables.map { |key, value| Escualo::Env.set_command key, value }
end
setup_environment_variables!() click to toggle source
# File lib/escualo/session/environment.rb, line 7
def setup_environment_variables!
  source_escualorc = "'source ~/.escualorc'"
  tell_all! 'mkdir -p ~/.escualo/vars',
            %q{echo 'for var in ~/.escualo/vars/*; do source $var; done' > ~/.escualorc},
            %q{chmod u+x ~/.escualorc},
            "grep -q #{source_escualorc} ~/.bashrc || echo #{source_escualorc} >> ~/.bashrc"
end
tell!(command) click to toggle source
# File lib/escualo/session.rb, line 18
def tell!(command)
  if options.verbose
    stream! command
  else
    exec! command
  end
end
tell_all!(*commands) click to toggle source
# File lib/escualo/session.rb, line 14
def tell_all!(*commands)
  tell! commands.compact.join(' && ')
end
unset_environment_variables!(variable_names) click to toggle source
# File lib/escualo/session/environment.rb, line 19
def unset_environment_variables!(variable_names)
  tell_all! *variable_names.map { |name| Escualo::Env.unset_command name }
end
upload_template!(destination, name, bindings) click to toggle source
# File lib/escualo/session.rb, line 26
def upload_template!(destination, name, bindings)
  write_template! name, Mumukit::Core::Template.new(File.join(__dir__, '..', 'templates', "#{name}.erb"), bindings) do |file|
    upload! file, destination
  end
end
write_template!(name, template, &block) click to toggle source
# File lib/escualo/session.rb, line 36
def write_template!(name, template, &block)
  template.with_tempfile!('template', &block)
end