lib/chef/knife/ssh.rb in chef-0.10.4 vs lib/chef/knife/ssh.rb in chef-0.10.6.beta.1
- old
+ new
@@ -81,20 +81,27 @@
:description => "Disable host key verification",
:boolean => true,
:default => false
def session
+ config[:on_error] ||= :skip
ssh_error_handler = Proc.new do |server|
if config[:manual]
node_name = server.host
else
@action_nodes.each do |n|
node_name = n if format_for_display(n)[config[:attribute]] == server.host
end
end
- ui.warn "Failed to connect to #{node_name} -- #{$!.class.name}: #{$!.message}"
- $!.backtrace.each { |l| Chef::Log.debug(l) }
+ case config[:on_error]
+ when :skip
+ ui.warn "Failed to connect to #{node_name} -- #{$!.class.name}: #{$!.message}"
+ $!.backtrace.each { |l| Chef::Log.debug(l) }
+ when :raise
+ #Net::SSH::Multi magic to force exception to be re-raised.
+ throw :go, :raise
+ end
end
@session ||= Net::SSH::Multi.start(:concurrent_connections => config[:concurrency], :on_error => ssh_error_handler)
end
@@ -263,11 +270,11 @@
else
[]
end.join(" \\; ")
end
- tmux_name = "'knife ssh #{@name_args[0]}'"
+ tmux_name = "'knife ssh #{@name_args[0].gsub(/:/,'=')}'"
begin
server = session.servers_for.first
cmd = ["tmux new-session -d -s #{tmux_name}",
"-n '#{server.host}'", ssh_dest.call(server),
new_window_cmds.call].join(" ")
@@ -305,10 +312,18 @@
config[:attribute] = (config[:attribute] ||
Chef::Config[:knife][:ssh_attribute] ||
"fqdn").strip
end
+ def csshx
+ csshx_cmd = "csshX"
+ session.servers_for.each do |server|
+ csshx_cmd << " #{server.user ? "#{server.user}@#{server.host}" : server.host}"
+ end
+ exec(csshx_cmd)
+ end
+
def configure_user
config[:ssh_user] = (config[:ssh_user] ||
Chef::Config[:knife][:ssh_user])
config[:ssh_user].strip! unless config[:ssh_user].nil?
end
@@ -335,9 +350,11 @@
screen
when "tmux"
tmux
when "macterm"
macterm
+ when "csshx"
+ csshx
else
ssh_command(@name_args[1..-1].join(" "))
end
session.close