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