mirror of https://github.com/docker/buildx.git
				
				
				
			
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
| package commands
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"fmt"
 | |
| 
 | |
| 	"github.com/docker/buildx/monitor/types"
 | |
| 	"github.com/pkg/errors"
 | |
| )
 | |
| 
 | |
| type DisconnectCmd struct {
 | |
| 	m types.Monitor
 | |
| }
 | |
| 
 | |
| func NewDisconnectCmd(m types.Monitor) types.Command {
 | |
| 	return &DisconnectCmd{m}
 | |
| }
 | |
| 
 | |
| func (cm *DisconnectCmd) Info() types.CommandInfo {
 | |
| 	return types.CommandInfo{
 | |
| 		Name:        "disconnect",
 | |
| 		HelpMessage: "disconnect a client from a buildx server. Specific session ID can be specified an arg",
 | |
| 		HelpMessageLong: fmt.Sprintf(`
 | |
| Usage:
 | |
|   disconnect [ID]
 | |
| 
 | |
| ID is for a session (visible via list command). Default is %q.
 | |
| `, cm.m.AttachedSessionID()),
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (cm *DisconnectCmd) Exec(ctx context.Context, args []string) error {
 | |
| 	target := cm.m.AttachedSessionID()
 | |
| 	if len(args) >= 2 {
 | |
| 		target = args[1]
 | |
| 	} else if target == "" {
 | |
| 		return errors.Errorf("no attaching session")
 | |
| 	}
 | |
| 	isProcess, err := isProcessID(ctx, cm.m, target)
 | |
| 	if err == nil && isProcess {
 | |
| 		sid := cm.m.AttachedSessionID()
 | |
| 		if sid == "" {
 | |
| 			return errors.Errorf("no attaching session")
 | |
| 		}
 | |
| 		if err := cm.m.DisconnectProcess(ctx, sid, target); err != nil {
 | |
| 			return errors.Errorf("disconnecting from process failed %v", target)
 | |
| 		}
 | |
| 		return nil
 | |
| 	}
 | |
| 	if err := cm.m.DisconnectSession(ctx, target); err != nil {
 | |
| 		return errors.Errorf("disconnecting from session failed: %v", err)
 | |
| 	}
 | |
| 	return nil
 | |
| }
 |