mirror of
https://github.com/DeBrosOfficial/orama.git
synced 2026-05-01 03:54:12 +00:00
Fix
This commit is contained in:
parent
7284cb4578
commit
69c7ed5e5a
@ -1,6 +1,7 @@
|
|||||||
package pushcmd
|
package pushcmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@ -142,7 +143,11 @@ func pushFanout(nodes []inspector.Node, archivePath string) error {
|
|||||||
hub := nodes[0]
|
hub := nodes[0]
|
||||||
targets := nodes[1:]
|
targets := nodes[1:]
|
||||||
remotePath := "/tmp/" + filepath.Base(archivePath)
|
remotePath := "/tmp/" + filepath.Base(archivePath)
|
||||||
extractCmd := fmt.Sprintf("mkdir -p /opt/orama && tar xzf %s -C /opt/orama && rm -f %s", remotePath, remotePath)
|
// Hub extraction keeps the archive so it can be fanned out to targets.
|
||||||
|
// The cleanup at the end removes it.
|
||||||
|
hubExtractCmd := fmt.Sprintf("mkdir -p /opt/orama && tar xzf %s -C /opt/orama", remotePath)
|
||||||
|
// Target extraction deletes the archive after extracting.
|
||||||
|
targetExtractCmd := fmt.Sprintf("mkdir -p /opt/orama && tar xzf %s -C /opt/orama && rm -f %s", remotePath, remotePath)
|
||||||
|
|
||||||
// Load SSH keys into the system ssh-agent for agent forwarding
|
// Load SSH keys into the system ssh-agent for agent forwarding
|
||||||
fmt.Println(" Loading SSH keys into agent...")
|
fmt.Println(" Loading SSH keys into agent...")
|
||||||
@ -158,7 +163,7 @@ func pushFanout(nodes []inspector.Node, archivePath string) error {
|
|||||||
return fmt.Errorf("failed to upload to hub %s: %w", hub.Host, err)
|
return fmt.Errorf("failed to upload to hub %s: %w", hub.Host, err)
|
||||||
}
|
}
|
||||||
fmt.Printf(" extracting...")
|
fmt.Printf(" extracting...")
|
||||||
if err := remotessh.RunSSHStreaming(hub, "sudo bash -c '"+extractCmd+"'"); err != nil {
|
if err := remotessh.RunSSHStreaming(hub, "sudo bash -c '"+hubExtractCmd+"'"); err != nil {
|
||||||
return fmt.Errorf("failed to extract on hub %s: %w", hub.Host, err)
|
return fmt.Errorf("failed to extract on hub %s: %w", hub.Host, err)
|
||||||
}
|
}
|
||||||
fmt.Println(" OK")
|
fmt.Println(" OK")
|
||||||
@ -169,7 +174,7 @@ func pushFanout(nodes []inspector.Node, archivePath string) error {
|
|||||||
scpCmd := fmt.Sprintf(
|
scpCmd := fmt.Sprintf(
|
||||||
"scp -o StrictHostKeyChecking=accept-new -o IdentitiesOnly=no %s %s@%s:%s && ssh -o StrictHostKeyChecking=accept-new %s@%s 'sudo bash -c \"%s\"' && echo '%s: done'",
|
"scp -o StrictHostKeyChecking=accept-new -o IdentitiesOnly=no %s %s@%s:%s && ssh -o StrictHostKeyChecking=accept-new %s@%s 'sudo bash -c \"%s\"' && echo '%s: done'",
|
||||||
remotePath, t.User, t.Host, remotePath,
|
remotePath, t.User, t.Host, remotePath,
|
||||||
t.User, t.Host, extractCmd,
|
t.User, t.Host, targetExtractCmd,
|
||||||
t.Host,
|
t.Host,
|
||||||
)
|
)
|
||||||
fanoutParts = append(fanoutParts, "("+scpCmd+") &")
|
fanoutParts = append(fanoutParts, "("+scpCmd+") &")
|
||||||
@ -177,8 +182,13 @@ func pushFanout(nodes []inspector.Node, archivePath string) error {
|
|||||||
fanoutParts = append(fanoutParts, "wait", "echo 'Fanout complete'")
|
fanoutParts = append(fanoutParts, "wait", "echo 'Fanout complete'")
|
||||||
fanoutScript := strings.Join(fanoutParts, "\n")
|
fanoutScript := strings.Join(fanoutParts, "\n")
|
||||||
|
|
||||||
|
// Base64-encode the script to avoid shell quoting conflicts — the script
|
||||||
|
// contains single quotes (ssh '...') that would break a bash -c '...' wrapper.
|
||||||
|
encoded := base64.StdEncoding.EncodeToString([]byte(fanoutScript))
|
||||||
|
runCmd := fmt.Sprintf("echo %s | base64 -d | bash", encoded)
|
||||||
|
|
||||||
fmt.Printf(" Fanning out to %d nodes from %s...\n", len(targets), hub.Host)
|
fmt.Printf(" Fanning out to %d nodes from %s...\n", len(targets), hub.Host)
|
||||||
if err := remotessh.RunSSHStreaming(hub, "bash -c '"+fanoutScript+"'", remotessh.WithAgentForward()); err != nil {
|
if err := remotessh.RunSSHStreaming(hub, runCmd, remotessh.WithAgentForward()); err != nil {
|
||||||
fmt.Printf(" Fanout failed: %v\n", err)
|
fmt.Printf(" Fanout failed: %v\n", err)
|
||||||
fmt.Println(" Some nodes may not have been updated")
|
fmt.Println(" Some nodes may not have been updated")
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user