module ZTK::SSH::Bootstrap

SSH Bootstrap Functionality

Public Instance Methods

bootstrap(content, options={}) click to toggle source

SSH Bootstrap

Renders the content string into a file on the remote host and proceeds to execute it via /bin/bash. Sudo is prefixed by default, but can be disabled.

@example Sample Bootstrap, assuming the @ssh variable is an instance of ZTK::SSH connected to a host.

@ssh.bootstrap(IO.read("bootstrap.sh"))

@example

@ssh.bootstrap("apt-get -y upgrade")

@param [String] content What to render out to the bootstrap file we will

execute.

@param [Hash] options The options hash. This will also accept options

for #exec in order to better control the bootstrapping execution.

@option options [String] :use_sudo True if we should execute the

bootstrap via sudo; False to execute it as the defined user.
# File lib/ztk/ssh/bootstrap.rb, line 26
def bootstrap(content, options={})
  options = {
    :silence => true,
    :use_sudo => true,
    :set_x => true,
    :set_e => false
  }.merge(options)

  bootstrap_tempfile = Tempfile.new("bootstrap")
  remote_tempfile = ::File.join("", "tmp", ::File.basename(bootstrap_tempfile.path.dup))
  bootstrap_tempfile.close!

  local_tempfile  = Tempfile.new("tempfile-local")

  local_tempfile.puts(content)
  local_tempfile.respond_to?(:flush) and local_tempfile.flush

  command = Array.new
  command << %(sudo) if (options[:use_sudo] == true)
  command << %(/bin/bash)
  command << %(-x) if (options[:set_x] == true)
  command << %(-e) if (options[:set_e] == true)
  command << remote_tempfile
  command = command.join(' ')

  self.upload(local_tempfile.path, remote_tempfile)

  result = self.exec(command, options)

  local_tempfile.close!

  result
end