Module: Bootstrapsync

Defined in:
lib/chef/knife/bootstrapsync.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/chef/knife/bootstrapsync.rb', line 35

def included(klass)
  klass.class_eval do
    alias_method :non_sync_bootstrap_run, :run
    alias_method :run, :sync_bootstrap_run

    option(:sync_directory,
      :long => '--sync-directory LOCAL_PATH:REMOTE_PATH',
      :description => 'Sync local directory to remote server',
      :proc => Proc.new{ |k|
        dirs = k.split(':')
        Chef::Config[:knife][:directory_sync] = {:local => dirs.first, :remote => dirs.last}
      }
    )
  end
end

Instance Method Details

#sync_bootstrap_runObject



4
5
6
7
# File 'lib/chef/knife/bootstrapsync.rb', line 4

def sync_bootstrap_run
  sync_directory
  non_sync_bootstrap_run
end

#sync_directoryObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/chef/knife/bootstrapsync.rb', line 9

def sync_directory
  require 'net/sftp'
  host = name_args.first
  user = config[:ssh_user]
  args = {}
  args[:password] = config[:ssh_password] if config[:ssh_password]
  args[:keys] = [config[:identity_file]] if config[:identity_file]
  begin
    Net::SFTP.start(host, user, args) do |sftp|
      begin
        sftp.mkdir!(File.dirname(Chef::Config[:knife][:directory_sync][:remote]))
      rescue
        puts 'Cookbook dir already exists'
      end
      sftp.upload!(
        Chef::Config[:knife][:directory_sync][:local],
        Chef::Config[:knife][:directory_sync][:remote],
        :mkdir => true
      )
    end
  rescue
    puts 'Upload Failed'
  end
end