diff options
Diffstat (limited to 'lib/chef/knife/ssh.rb')
-rw-r--r-- | lib/chef/knife/ssh.rb | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/lib/chef/knife/ssh.rb b/lib/chef/knife/ssh.rb index 8cc05bd433..e1090fcca0 100644 --- a/lib/chef/knife/ssh.rb +++ b/lib/chef/knife/ssh.rb @@ -147,7 +147,7 @@ class Chef @action_nodes = q.search(:node, @name_args[0])[0] @action_nodes.each do |item| # we should skip the loop to next iteration if the item returned by the search is nil - next if item.nil? + next if item.nil? # if a command line attribute was not passed, and we have a cloud public_hostname, use that. # see #configure_attribute for the source of config[:attribute] and config[:override_attribute] if !config[:override_attribute] && item[:cloud] and item[:cloud][:public_hostname] @@ -211,15 +211,28 @@ class Chef end def print_data(host, data) - if data =~ /\n/ - data.split(/\n/).each { |d| print_data(host, d) } + @buffers ||= {} + if leftover = @buffers[host] + @buffers[host] = nil + print_data(host, leftover + data) else - padding = @longest - host.length - str = ui.color(host, :cyan) + (" " * (padding + 1)) + data - ui.msg(str) + if newline_index = data.index("\n") + line = data.slice!(0...newline_index) + data.slice!(0) + print_line(host, line) + print_data(host, data) + else + @buffers[host] = data + end end end + def print_line(host, data) + padding = @longest - host.length + str = ui.color(host, :cyan) + (" " * (padding + 1)) + data + ui.msg(str) + end + def ssh_command(command, subsession=nil) exit_status = 0 subsession ||= session @@ -232,6 +245,7 @@ class Chef ch.on_data do |ichannel, data| print_data(ichannel[:host], data) if data =~ /^knife sudo password: / + print_data(ichannel[:host], "\n") ichannel.send_data("#{get_password}\n") end end @@ -383,7 +397,7 @@ class Chef # Thus we can differentiate between a config file value and a command line override at this point by checking config[:attribute] # We can tell here if fqdn was passed from the command line, rather than being the default, by checking config[:attribute] # However, after here, we cannot tell these things, so we must preserve config[:attribute] - config[:override_attribute] = config[:attribute] || Chef::Config[:knife][:ssh_attribute] + config[:override_attribute] = config[:attribute] || Chef::Config[:knife][:ssh_attribute] config[:attribute] = (Chef::Config[:knife][:ssh_attribute] || config[:attribute] || "fqdn").strip |