refactor: promote remote to session level
- CreateEmpty(name, remote) now spawns remote toolsrv when remote is set - requestSessionNew parses remote= argument - Add Session.SetRemote() method - Update kde submodule
This commit is contained in:
parent
e1b732f09a
commit
d200fbad05
|
|
@ -243,12 +243,18 @@ func readSessionIdx(_ HandlerCtx) ([]byte, error) {
|
|||
func requestSessionNew(_ HandlerCtx, data []byte) ([]byte, error) {
|
||||
args := strings.Fields(string(data))
|
||||
name := ""
|
||||
remote := ""
|
||||
for _, arg := range args {
|
||||
if k, v, ok := strings.Cut(arg, "="); ok && k == "name" {
|
||||
name = v
|
||||
if k, v, ok := strings.Cut(arg, "="); ok {
|
||||
switch k {
|
||||
case "name":
|
||||
name = v
|
||||
case "remote":
|
||||
remote = v
|
||||
}
|
||||
}
|
||||
}
|
||||
sess, err := session.CreateEmpty(name)
|
||||
sess, err := session.CreateEmpty(name, remote)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
2
kde
2
kde
|
|
@ -1 +1 @@
|
|||
Subproject commit ec89eaae1876500509395253c58972309c6ce968
|
||||
Subproject commit 265a1fdda9c47244d0238b855c2d3ac0ae1b6efb
|
||||
|
|
@ -13,7 +13,6 @@ import (
|
|||
"ollie/agent"
|
||||
"ollie/backend"
|
||||
olog "ollie/log"
|
||||
"ollie/toolsrv"
|
||||
)
|
||||
|
||||
// Package-level session registry with thread-safe access.
|
||||
|
|
@ -244,7 +243,8 @@ func BuildIndex() []byte {
|
|||
}
|
||||
|
||||
// CreateEmpty creates an empty session (no agent).
|
||||
func CreateEmpty(name string) (*Session, error) {
|
||||
// If remote is non-empty, spawns a remote tool server via SSH.
|
||||
func CreateEmpty(name, remote string) (*Session, error) {
|
||||
sessID := NewSessionID()
|
||||
if name == "" {
|
||||
name = sessID
|
||||
|
|
@ -262,29 +262,23 @@ func CreateEmpty(name string) (*Session, error) {
|
|||
|
||||
ctx, cancel := context.WithCancel(pkgCtx)
|
||||
sess := NewEmpty(sessID, ctx, cancel)
|
||||
sess.SetRemote(remote)
|
||||
|
||||
// Spawn tool server
|
||||
// Spawn tool server (local or remote)
|
||||
cwd, _ := os.Getwd()
|
||||
var dialOpts []toolsrv.Option
|
||||
if pkgYolo {
|
||||
dialOpts = append(dialOpts, toolsrv.WithYolo())
|
||||
}
|
||||
proc, err := toolsrv.Spawn(ctx, cwd, dialOpts...)
|
||||
infra, err := SetupToolServer(ToolServerConfig{
|
||||
Ctx: ctx,
|
||||
CWD: cwd,
|
||||
RemoteTarget: remote,
|
||||
Yolo: pkgYolo,
|
||||
})
|
||||
if err != nil {
|
||||
cancel()
|
||||
return nil, fmt.Errorf("spawn tool server: %w", err)
|
||||
return nil, fmt.Errorf("setup tool server: %w", err)
|
||||
}
|
||||
sess.SetProc(proc)
|
||||
sess.SetKeeper(toolsrv.NewProcessKeeper(ctx, proc, func(ctx context.Context) (*toolsrv.Process, error) {
|
||||
return toolsrv.Spawn(ctx, cwd, dialOpts...)
|
||||
}))
|
||||
conn, err := toolsrv.Dial(ctx, toolsrv.LocalAddr(proc.Socket))
|
||||
if err != nil {
|
||||
cancel()
|
||||
proc.Close()
|
||||
return nil, fmt.Errorf("dial tool server: %w", err)
|
||||
}
|
||||
sess.SetToolsConn(conn)
|
||||
sess.SetProc(infra.Proc)
|
||||
sess.SetKeeper(infra.Keeper)
|
||||
sess.SetToolsConn(infra.ToolsConn)
|
||||
|
||||
mu.Lock()
|
||||
sessions[name] = sess
|
||||
|
|
|
|||
|
|
@ -289,6 +289,11 @@ func (a *Session) Remote() string {
|
|||
return a.remote
|
||||
}
|
||||
|
||||
// SetRemote sets the remote target for this session.
|
||||
func (a *Session) SetRemote(remote string) {
|
||||
a.remote = remote
|
||||
}
|
||||
|
||||
// SetCWD validates and sets the working directory on all agents.
|
||||
func (a *Session) SetCWD(dir string) error {
|
||||
dir = paths.ExpandHome(dir)
|
||||
|
|
@ -578,12 +583,16 @@ func NewEmpty(id string, ctx context.Context, cancel context.CancelFunc) *Sessio
|
|||
if idx := strings.IndexByte(id, '-'); idx > 0 {
|
||||
name = id[:idx]
|
||||
}
|
||||
log := pkgSink.NewLogger("session")
|
||||
return &Session{
|
||||
id: id,
|
||||
name: name,
|
||||
ctx: ctx,
|
||||
cancel: cancel,
|
||||
env: make(map[string]string),
|
||||
agents: make([]*agent.Agent, 0),
|
||||
id: id,
|
||||
name: name,
|
||||
ctx: ctx,
|
||||
cancel: cancel,
|
||||
env: make(map[string]string),
|
||||
agents: make([]*agent.Agent, 0),
|
||||
log: log,
|
||||
auditLog: log.Sub("audit"),
|
||||
sessionsDir: pkgSessionsDir,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue