Class | BoxGrinder::SFTPPlugin |
In: |
lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb
lib/boxgrinder-build/plugins/delivery/sftp/sftp-plugin.rb |
Parent: | BasePlugin |
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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
# 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