|  | @@ -7,6 +7,7 @@ import (
 | 
	
		
			
				|  |  |  	"io/ioutil"
 | 
	
		
			
				|  |  |  	"net/http"
 | 
	
		
			
				|  |  |  	"os"
 | 
	
		
			
				|  |  | +	"strings"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	"github.com/Azure/azure-sdk-for-go/services/containerinstance/mgmt/2018-10-01/containerinstance"
 | 
	
		
			
				|  |  |  	"github.com/Azure/azure-sdk-for-go/services/keyvault/auth"
 | 
	
	
		
			
				|  | @@ -133,23 +134,32 @@ func getTermSize() (*int32, *int32) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  type commandSender struct {
 | 
	
		
			
				|  |  | -	commands []string
 | 
	
		
			
				|  |  | +	commands string
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func (cs commandSender) Read(p []byte) (int, error) {
 | 
	
		
			
				|  |  | +func (cs *commandSender) Read(p []byte) (int, error) {
 | 
	
		
			
				|  |  |  	if len(cs.commands) == 0 {
 | 
	
		
			
				|  |  |  		return 0, io.EOF
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	command := cs.commands[0]
 | 
	
		
			
				|  |  | -	cs.commands = cs.commands[1:]
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	var command string
 | 
	
		
			
				|  |  | +	if len(p) >= len(cs.commands) {
 | 
	
		
			
				|  |  | +		command = cs.commands
 | 
	
		
			
				|  |  | +		cs.commands = ""
 | 
	
		
			
				|  |  | +	} else {
 | 
	
		
			
				|  |  | +		command = cs.commands[:len(p)]
 | 
	
		
			
				|  |  | +		cs.commands = cs.commands[len(p):]
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	copy(p, command)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	return len(command), nil
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func execCommands(ctx context.Context, address string, password string, commands []string) error {
 | 
	
		
			
				|  |  |  	writer := ioutil.Discard
 | 
	
		
			
				|  |  | -	reader := commandSender{
 | 
	
		
			
				|  |  | -		commands: commands,
 | 
	
		
			
				|  |  | +	reader := &commandSender{
 | 
	
		
			
				|  |  | +		commands: strings.Join(commands, "\n"),
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	return exec(ctx, address, password, reader, writer)
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -189,6 +199,10 @@ func exec(ctx context.Context, address string, password string, reader io.Reader
 | 
	
		
			
				|  |  |  			buffer := make([]byte, 1)
 | 
	
		
			
				|  |  |  			n, err := reader.Read(buffer)
 | 
	
		
			
				|  |  |  			if err != nil {
 | 
	
		
			
				|  |  | +				if err == io.EOF {
 | 
	
		
			
				|  |  | +					upstreamChannel <- nil
 | 
	
		
			
				|  |  | +					return
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  |  				upstreamChannel <- err
 | 
	
		
			
				|  |  |  				return
 | 
	
		
			
				|  |  |  			}
 | 
	
	
		
			
				|  | @@ -197,6 +211,7 @@ func exec(ctx context.Context, address string, password string, reader io.Reader
 | 
	
		
			
				|  |  |  				err := wsutil.WriteClientMessage(conn, ws.OpText, buffer)
 | 
	
		
			
				|  |  |  				if err != nil {
 | 
	
		
			
				|  |  |  					upstreamChannel <- err
 | 
	
		
			
				|  |  | +					return
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 |