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.

[View source]

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