lib/kontena/cli/services/exec_command.rb in kontena-cli-1.3.0.rc1 vs lib/kontena/cli/services/exec_command.rb in kontena-cli-1.3.0.rc2
- old
+ new
@@ -22,12 +22,10 @@
requires_current_master
requires_current_grid
def execute
- require 'websocket-client-simple'
-
exit_with_error "--interactive cannot be used with --all" if all? && interactive?
service_containers = client.get("services/#{parse_service_id(name)}/containers")['containers']
service_containers.sort_by! { |container| container['instance_number'] }
running_containers = service_containers.select{|container| container['status'] == 'running' }
@@ -90,11 +88,11 @@
base = self
cmd = JSON.dump({ cmd: cmd_list })
exit_status = nil
token = require_token
url = ws_url(container['id'])
- url << '?shell=true' if shell?
+ url << 'shell=true' if shell?
ws = connect(url, token)
ws.on :message do |msg|
data = base.parse_message(msg)
if data
if data['exit']
@@ -105,39 +103,39 @@
$stderr << data['chunk']
end
end
end
ws.on :open do
- ws.send(cmd)
+ ws.text(cmd)
end
- ws.on :close do |e|
- exit_status = 1
+ ws.on :close do |e|s
+ exit_status = 1 if exit_status.nil? && e.code != 1000
end
+ ws.connect
sleep 0.01 until !exit_status.nil?
exit_status
end
# @param [Hash] container
def interactive_exec(container)
- require 'io/console'
-
token = require_token
cmd = JSON.dump({ cmd: cmd_list })
base = self
- url = ws_url(container['id']) << '?interactive=true'
+ url = ws_url(container['id']) << 'interactive=true'
url << '&shell=true' if shell?
ws = connect(url, token)
ws.on :message do |msg|
base.handle_message(msg)
end
ws.on :open do
- ws.send(cmd)
+ ws.text(cmd)
end
ws.on :close do |e|
- exit 1
+ exit 1 if e.code != 1000
end
+ ws.connect
stream_stdin_to_ws(ws).join
end
end
end
\ No newline at end of file