Class BoxGrinder::SFTPPlugin
In: lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb
lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb
Parent: BasePlugin

Methods

Public Instance methods

[Source]

    # File lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb, line 35
35:     def after_init
36:       register_deliverable(:package => "#{@appliance_config.name}-#{@appliance_config.version}.#{@appliance_config.release}-#{@appliance_config.os.name}-#{@appliance_config.os.version}-#{@appliance_config.hardware.arch}-#{current_platform}.tgz")
37:     end

[Source]

    # File lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb, line 35
35:     def after_init
36:       register_deliverable(:package => "#{@appliance_config.name}-#{@appliance_config.version}.#{@appliance_config.release}-#{@appliance_config.os.name}-#{@appliance_config.os.version}-#{@appliance_config.hardware.arch}-#{current_platform}.tgz")
37:     end

[Source]

    # File lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb, line 57
57:     def connect
58:       @log.info "Connecting to #{@plugin_config['host']}..."
59:       @ssh = Net::SSH.start(@plugin_config['host'], @plugin_config['username'], {:password => @plugin_config['password']})
60:     end

[Source]

    # File lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb, line 57
57:     def connect
58:       @log.info "Connecting to #{@plugin_config['host']}..."
59:       @ssh = Net::SSH.start(@plugin_config['host'], @plugin_config['username'], {:password => @plugin_config['password']})
60:     end

[Source]

    # File lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb, line 62
62:     def connected?
63:       return true if !@ssh.nil? and !@ssh.closed?
64:       false
65:     end

[Source]

    # File lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb, line 62
62:     def connected?
63:       return true if !@ssh.nil? and !@ssh.closed?
64:       false
65:     end

[Source]

    # File lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb, line 67
67:     def disconnect
68:       @log.info "Disconnecting from #{@plugin_config['host']}..."
69:       @ssh.close if connected?
70:       @ssh = nil
71:     end

[Source]

    # File lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb, line 67
67:     def disconnect
68:       @log.info "Disconnecting from #{@plugin_config['host']}..."
69:       @ssh.close if connected?
70:       @ssh = nil
71:     end

[Source]

    # File lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb, line 39
39:     def execute
40:       PackageHelper.new(@config, @appliance_config, :log => @log, :exec_helper => @exec_helper).package( File.dirname(@previous_deliverables[:disk]), @deliverables[:package] )
41: 
42:       @log.info "Uploading #{@appliance_config.name} appliance via SSH..."
43: 
44:       begin
45:         #TODO move to a block
46:         connect
47:         upload_files(@plugin_config['path'], File.basename(@deliverables[:package]) => @deliverables[:package])
48:         disconnect
49: 
50:         @log.info "Appliance #{@appliance_config.name} uploaded."
51:       rescue => e
52:         @log.error e
53:         @log.error "An error occurred while uploading files."
54:       end
55:     end

[Source]

    # File lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb, line 39
39:     def execute
40:       PackageHelper.new(@config, @appliance_config, :log => @log, :exec_helper => @exec_helper).package( File.dirname(@previous_deliverables[:disk]), @deliverables[:package] )
41: 
42:       @log.info "Uploading #{@appliance_config.name} appliance via SSH..."
43: 
44:       begin
45:         #TODO move to a block
46:         connect
47:         upload_files(@plugin_config['path'], File.basename(@deliverables[:package]) => @deliverables[:package])
48:         disconnect
49: 
50:         @log.info "Appliance #{@appliance_config.name} uploaded."
51:       rescue => e
52:         @log.error e
53:         @log.error "An error occurred while uploading files."
54:       end
55:     end

[Source]

     # File lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb, line 73
 73:     def upload_files(path, files = {})
 74:       return if files.size == 0
 75: 
 76:       raise "You're not connected to server" unless connected?
 77: 
 78:       @log.debug "Files to upload:"
 79: 
 80:       files.each do |remote, local|
 81:         @log.debug "#{File.basename(local)} => #{path}/#{remote}"
 82:       end
 83: 
 84:       global_size = 0
 85: 
 86:       files.each_value do |file|
 87:         global_size += File.size(file)
 88:       end
 89: 
 90:       global_size_kb = global_size / 1024
 91:       global_size_mb = global_size_kb / 1024
 92: 
 93:       @log.info "#{files.size} files to upload (#{global_size_mb > 0 ? global_size_mb.to_s + "MB" : global_size_kb > 0 ? global_size_kb.to_s + "kB" : global_size.to_s})"
 94: 
 95:       @ssh.sftp.connect do |sftp|
 96:         begin
 97:           sftp.stat!(path)
 98:         rescue Net::SFTP::StatusException => e
 99:           raise unless e.code == 2
100:           @ssh.exec!("mkdir -p #{path}")
101:         end
102: 
103:         nb = 0
104: 
105:         files.each do |key, local|
106:           name       = File.basename(local)
107:           remote     = "#{path}/#{key}"
108:           size_b     = File.size(local)
109:           size_kb    = size_b / 1024
110:           nb_of      = "#{nb += 1}/#{files.size}"
111: 
112:           begin
113:             sftp.stat!(remote)
114: 
115:             unless @plugin_config['overwrite']
116: 
117:               local_md5_sum   = `md5sum #{local} | awk '{ print $1 }'`.strip
118:               remote_md5_sum  = @ssh.exec!("md5sum #{remote} | awk '{ print $1 }'").strip
119: 
120:               if (local_md5_sum.eql?(remote_md5_sum))
121:                 @log.info "#{nb_of} #{name}: files are identical (md5sum: #{local_md5_sum}), skipping..."
122:                 next
123:               end
124:             end
125: 
126:           rescue Net::SFTP::StatusException => e
127:             raise unless e.code == 2
128:           end
129: 
130:           @ssh.exec!("mkdir -p #{File.dirname(remote) }")
131: 
132:           pbar = ProgressBar.new("#{nb_of} #{name}", size_b)
133:           pbar.file_transfer_mode
134: 
135:           sftp.upload!(local, remote) do |event, uploader, * args|
136:             case event
137:               when :open then
138:               when :put then
139:                 pbar.set(args[1])
140:               when :close then
141:               when :mkdir then
142:               when :finish then
143:                 pbar.finish
144:             end
145:           end
146: 
147:           sftp.setstat(remote, :permissions => @plugin_config['default_permissions'])
148:         end
149:       end
150:     end

[Source]

     # File lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb, line 73
 73:     def upload_files(path, files = {})
 74:       return if files.size == 0
 75: 
 76:       raise "You're not connected to server" unless connected?
 77: 
 78:       @log.debug "Files to upload:"
 79: 
 80:       files.each do |remote, local|
 81:         @log.debug "#{File.basename(local)} => #{path}/#{remote}"
 82:       end
 83: 
 84:       global_size = 0
 85: 
 86:       files.each_value do |file|
 87:         global_size += File.size(file)
 88:       end
 89: 
 90:       global_size_kb = global_size / 1024
 91:       global_size_mb = global_size_kb / 1024
 92: 
 93:       @log.info "#{files.size} files to upload (#{global_size_mb > 0 ? global_size_mb.to_s + "MB" : global_size_kb > 0 ? global_size_kb.to_s + "kB" : global_size.to_s})"
 94: 
 95:       @ssh.sftp.connect do |sftp|
 96:         begin
 97:           sftp.stat!(path)
 98:         rescue Net::SFTP::StatusException => e
 99:           raise unless e.code == 2
100:           @ssh.exec!("mkdir -p #{path}")
101:         end
102: 
103:         nb = 0
104: 
105:         files.each do |key, local|
106:           name       = File.basename(local)
107:           remote     = "#{path}/#{key}"
108:           size_b     = File.size(local)
109:           size_kb    = size_b / 1024
110:           nb_of      = "#{nb += 1}/#{files.size}"
111: 
112:           begin
113:             sftp.stat!(remote)
114: 
115:             unless @plugin_config['overwrite']
116: 
117:               local_md5_sum   = `md5sum #{local} | awk '{ print $1 }'`.strip
118:               remote_md5_sum  = @ssh.exec!("md5sum #{remote} | awk '{ print $1 }'").strip
119: 
120:               if (local_md5_sum.eql?(remote_md5_sum))
121:                 @log.info "#{nb_of} #{name}: files are identical (md5sum: #{local_md5_sum}), skipping..."
122:                 next
123:               end
124:             end
125: 
126:           rescue Net::SFTP::StatusException => e
127:             raise unless e.code == 2
128:           end
129: 
130:           @ssh.exec!("mkdir -p #{File.dirname(remote) }")
131: 
132:           pbar = ProgressBar.new("#{nb_of} #{name}", size_b)
133:           pbar.file_transfer_mode
134: 
135:           sftp.upload!(local, remote) do |event, uploader, * args|
136:             case event
137:               when :open then
138:               when :put then
139:                 pbar.set(args[1])
140:               when :close then
141:               when :mkdir then
142:               when :finish then
143:                 pbar.finish
144:             end
145:           end
146: 
147:           sftp.setstat(remote, :permissions => @plugin_config['default_permissions'])
148:         end
149:       end
150:     end

[Source]

    # File lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb, line 28
28:     def validate
29:       set_default_config_value('overwrite', false)
30:       set_default_config_value('default_permissions', 0644)
31: 
32:       validate_plugin_config(['path', 'username', 'host'], 'http://boxgrinder.org/tutorials/boxgrinder-build-plugins/#SFTP_Delivery_Plugin')
33:     end

[Source]

    # File lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb, line 28
28:     def validate
29:       set_default_config_value('overwrite', false)
30:       set_default_config_value('default_permissions', 0644)
31: 
32:       validate_plugin_config(['path', 'username', 'host'], 'http://boxgrinder.org/tutorials/boxgrinder-build-plugins/#SFTP_Delivery_Plugin')
33:     end

[Validate]