class SimpleProvision::SCP

Constants

FILENAME

Public Class Methods

new(username, host, opts) click to toggle source
# File lib/simple_provision/scp.rb, line 6
def initialize(username, host, opts)
  @username, @host, @opts = username, host, opts
end

Public Instance Methods

copy_files() click to toggle source
# File lib/simple_provision/scp.rb, line 10
def copy_files
  create_local_archive
  scp_files_to_server
  remove_local_archive
end

Private Instance Methods

create_local_archive() click to toggle source
# File lib/simple_provision/scp.rb, line 18
def create_local_archive
  files = @opts[:files] || []
  scripts = @opts[:scripts] || []
  includes = files + scripts

  if includes.empty?
    raise "Both files and scripts are empty. You should provide some."
  end

  cmds = [
    "cd provision",
    "rm -rf tmp",
    "mkdir tmp",
    "mkdir tmp/files",
    "mkdir tmp/scripts"
  ]

  files.each { |f| cmds << "cp -r #{f} tmp/files/"}

  scripts.each { |f| cmds << "cp #{f} tmp/scripts/" }

  cmds << "cd tmp && tar -czf #{FILENAME} files/ scripts/"

  if ENV["VERBOSE"]
    puts "==============Execute Locally============"
    puts cmds.join("\n")
    puts "========================================="
  end
  system cmds.join("\n")
end
remove_local_archive() click to toggle source
# File lib/simple_provision/scp.rb, line 59
def remove_local_archive
  cmds = [
    "cd provision",
    "rm -rf tmp"
  ]

  system cmds.join("\n")
end
scp_files_to_server() click to toggle source
# File lib/simple_provision/scp.rb, line 49
def scp_files_to_server
  path = "provision/tmp/#{FILENAME}"

  Net::SCP.start(@host, @username) do |scp|
    scp.upload!(path, ".")
  end
rescue Net::SSH::HostKeyMismatch
  puts "Please run ssh #{@username}@#{@host} to verify the fingerprint first"
end