mirror of
https://github.com/gesellix/Bose-SoundTouch.git
synced 2026-08-24 14:47:23 +00:00
feat(cli,docs): setup migrate URL overrides + real-hardware recovery notes
Prompted by recovering a real speaker (192.168.178.28) that had gone stressed/unresponsive: it had previously been through `setup enable-ssh` without --service-url (leaving margeServerUrl persisted as the aftertouch.invalid placeholder, firmware retry-looping a failing DNS/curl lookup against it, #546-shaped), compounded by a burst of SSH connections from a `setup revert` attempt (see the dial-storm finding, tracked separately, not fixed here). Added --marge-url/--stats-url/--sw-update-url/--bmx-url override flags to `setup migrate`. No new backend logic: telnetURLsFromOptions (pkg/service/setup/telnet_migration.go) already supported per-field overrides end-to-end, shared with the XML method's applyURLOverrides -- the CLI just never exposed it. Lets a speaker's URLs be pointed anywhere (back to AfterTouch, or back to the genuine original Bose cloud) via a single telnet connection, no SSH and no .original backup required -- confirmed recovering the real speaker above (migration committed, a previously-timing-out plain SSH command returned instantly afterward). Documented in TROUBLESHOOTING.md: the enable-ssh placeholder-persistence gotcha (now with the escape hatch above) and the setup revert dial-storm risk as a known, not-yet-fixed issue with a workaround (prefer this lighter telnet-only migrate over repeated revert attempts). Documented the new flags in CLI-REFERENCE.md's setup migrate section.
This commit is contained in:
@@ -1135,6 +1135,10 @@ func setupMigrateCmd() *cli.Command {
|
||||
&cli.StringFlag{Name: "method", Value: string(setup.MigrationMethodTelnet), Usage: "telnet | hosts | resolv | xml"},
|
||||
&cli.StringFlag{Name: "proxy-url", Usage: "Optional upstream proxy URL (for --method=xml)"},
|
||||
&cli.BoolFlag{Name: "skip-preflight", Usage: "Skip the AfterTouch settings preflight (use when AfterTouch's settings endpoint is unreachable)"},
|
||||
&cli.StringFlag{Name: "marge-url", Usage: "Override margeServerUrl instead of deriving it from --service-url (e.g. to restore the original Bose cloud URL). Applies to --method=telnet and --method=xml"},
|
||||
&cli.StringFlag{Name: "stats-url", Usage: "Override statsServerUrl (telnet/xml)"},
|
||||
&cli.StringFlag{Name: "sw-update-url", Usage: "Override swUpdateUrl (telnet/xml)"},
|
||||
&cli.StringFlag{Name: "bmx-url", Usage: "Override bmxRegistryUrl (telnet/xml)"},
|
||||
},
|
||||
Action: func(c *cli.Context) error {
|
||||
cfg := GetClientConfig(c)
|
||||
@@ -1146,6 +1150,13 @@ func setupMigrateCmd() *cli.Command {
|
||||
return err
|
||||
}
|
||||
|
||||
options := map[string]string{
|
||||
"marge_url": c.String("marge-url"),
|
||||
"stats_url": c.String("stats-url"),
|
||||
"sw_update_url": c.String("sw-update-url"),
|
||||
"bmx_url": c.String("bmx-url"),
|
||||
}
|
||||
|
||||
m := setup.NewManager(serviceURL, nil, nil)
|
||||
|
||||
// For DNS-redirect methods check that AfterTouch's DNS listener
|
||||
@@ -1169,7 +1180,7 @@ func setupMigrateCmd() *cli.Command {
|
||||
|
||||
fmt.Printf("Migrating %s → %s using method=%s\n", cfg.Host, serviceURL, method)
|
||||
|
||||
logs, err := m.MigrateSpeaker(cfg.Host, serviceURL, c.String("proxy-url"), nil, method)
|
||||
logs, err := m.MigrateSpeaker(cfg.Host, serviceURL, c.String("proxy-url"), options, method)
|
||||
if logs != "" {
|
||||
fmt.Print(logs)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user