MCPcopy Create free account
hub / github.com/cloudbase/garm / CreateShellSession

Method CreateShellSession

workers/websocket/agent/agent.go:80–109  ·  view source on GitHub ↗
(ctx context.Context, sessionID uuid.UUID, clientConn *websocket.Conn)

Source from the content-addressed store, hash-verified

78}
79
80func (a *Agent) CreateShellSession(ctx context.Context, sessionID uuid.UUID, clientConn *websocket.Conn) (*ClientSession, error) {
81 a.mux.Lock()
82 defer a.mux.Unlock()
83
84 _, ok := a.shellSessions[sessionID.String()]
85 if ok {
86 return nil, runnerErrors.NewConflictError("session ID %q already in use", sessionID)
87 }
88 sess, err := NewClientSession(ctx, clientConn, a.writeMessage, sessionID)
89 if err != nil {
90 return nil, fmt.Errorf("failed to create new client session: %w", err)
91 }
92
93 if err := sess.Start(); err != nil {
94 return nil, fmt.Errorf("failed to start client session: %w", err)
95 }
96
97 if !a.instance.Capabilities.Shell {
98 shellDisabled := messaging.ShellReadyMessage{
99 SessionID: sessionID,
100 IsError: 1,
101 Message: []byte("agent shell is disabled"),
102 }
103 sess.safeWrite(websocket.BinaryMessage, shellDisabled.Marshal())
104 sess.Stop()
105 return nil, fmt.Errorf("agent shell is disabled")
106 }
107 a.shellSessions[sessionID.String()] = sess
108 return sess, nil
109}
110
111func (a *Agent) RemoveClientSession(sessionID uuid.UUID, safe bool) error {
112 if !safe {

Callers 1

AgentShellHandlerMethod · 0.80

Calls 8

StartMethod · 0.95
safeWriteMethod · 0.95
MarshalMethod · 0.95
StopMethod · 0.95
NewClientSessionFunction · 0.85
LockMethod · 0.65
UnlockMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected