Module: ZTK::SSH::Bootstrap

Included in:
ZTK::SSH
Defined in:
lib/ztk/ssh/bootstrap.rb

Overview

SSH Bootstrap Functionality

Instance Method Summary (collapse)

Instance Method Details

- (Object) bootstrap(content, options = {})

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.

Examples:

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

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

Parameters:

  • content (String)

    What to render out to the bootstrap file we will execute.

  • options (Hash) (defaults to: {})

    The options hash. This will also accept options for #exec in order to better control the bootstrapping execution.

Options Hash (options):

  • :use_sudo (String)

    True if we should execute the bootstrap via sudo; False to execute it as the defined user.



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 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