Skip to content

Commit a63e882

Browse files
authored
Merge pull request #542 from reubenmiller/fix-respect-legacy-session-modes
fix: respect legacy session mode in existing sessions
2 parents b96b3e8 + 54c5590 commit a63e882

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

pkg/cmd/sessions/set/set.manual.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ func (n *CmdSet) RunE(cmd *cobra.Command, args []string) error {
105105
return err
106106
}
107107

108+
// Ensure session values from previously read configuration is not transferred
109+
cfg.Set("settings.session.mode", nil)
110+
108111
canChangeActiveSession := true
109112
// Warn users if they try to use this command directly
110113
if n.factory.IOStreams != nil {
@@ -245,6 +248,13 @@ func (n *CmdSet) RunE(cmd *cobra.Command, args []string) error {
245248
return err
246249
}
247250

251+
mode := cfg.SessionMode(config.SessionModeUnset).String()
252+
// Respect session mode using the legacy format (e.g. set via individual create,update,delete values)
253+
if legacyMode, legacyValueExists := config.HasLegacySessionMode(cfg.Persistent); legacyValueExists {
254+
mode = legacyMode.String()
255+
cfg.Logger.Debugf("Detected legacy mode. mode=%s", mode)
256+
}
257+
248258
if hasChanged(handler.C8Yclient, cfg) {
249259
log.Infof("Saving tenant name")
250260
n.onSave(handler.C8Yclient)
@@ -261,7 +271,7 @@ func (n *CmdSet) RunE(cmd *cobra.Command, args []string) error {
261271
Tenant: cfg.GetTenant(),
262272
Version: cfg.GetCumulocityVersion(),
263273
Username: handler.C8Yclient.Username,
264-
Mode: cfg.SessionMode(config.SessionModeUnset).String(),
274+
Mode: mode,
265275
}
266276

267277
outputFormat := cfg.GetOutputFormatWithDefault(cmd, config.OutputUnknown).String()

pkg/config/cliConfiguration.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package config
22

33
import (
4+
"encoding/json"
45
"errors"
56
"fmt"
67
"io"
@@ -1447,6 +1448,33 @@ func (c *Config) SessionMode(defaultMode ...SessionMode) SessionMode {
14471448
return mode.FromString(c.viper.GetString(SettingsMode), c.IsCIMode())
14481449
}
14491450

1451+
func HasLegacySessionMode(v *viper.Viper) (SessionMode, bool) {
1452+
// Prefer newer session value
1453+
if v.IsSet("settings.session.mode") {
1454+
return SessionModeUnset, false
1455+
}
1456+
1457+
// Check for legacy settings
1458+
if !(v.IsSet("settings.mode.enablecreate") || v.IsSet("settings.mode.enableupdate") || v.IsSet("settings.mode.enabledelete")) {
1459+
return SessionModeUnset, false
1460+
}
1461+
1462+
// Map legacy mode settings to session mode
1463+
enableCreate := v.GetBool("settings.mode.enablecreate")
1464+
enableUpdate := v.GetBool("settings.mode.enableupdate")
1465+
enableDelete := v.GetBool("settings.mode.enabledelete")
1466+
1467+
mode := SessionModeUnset
1468+
if !enableCreate && !enableUpdate && !enableDelete {
1469+
mode = SessionModeProduction
1470+
} else if enableCreate && enableUpdate && !enableDelete {
1471+
mode = SessionModeQual
1472+
} else if enableCreate && enableUpdate && enableDelete {
1473+
mode = SessionModeDev
1474+
}
1475+
return mode, true
1476+
}
1477+
14501478
// AllowModeCreate enables create (post) commands
14511479
func (c *Config) AllowModeCreate() bool {
14521480
return c.SessionMode().CanCreate()
@@ -1826,6 +1854,18 @@ func (c *Config) AllSettings() map[string]interface{} {
18261854
return c.viper.AllSettings()
18271855
}
18281856

1857+
// MarshalSettings marshals all of the settings into json for debugging purposes
1858+
func (c *Config) MarshalSettings() ([]byte, error) {
1859+
values := map[string]any{}
1860+
if c.Persistent != nil {
1861+
values["all"] = c.viper.AllSettings()
1862+
}
1863+
if c.Persistent != nil {
1864+
values["persistent"] = c.Persistent.AllSettings()
1865+
}
1866+
return json.Marshal(values)
1867+
}
1868+
18291869
// SaveClientConfig save client settings to the session configuration
18301870
func (c *Config) SaveClientConfig(client *c8y.Client) error {
18311871
if client != nil {

0 commit comments

Comments
 (0)