@@ -16,18 +16,13 @@ import (
1616)
1717
1818func newUpCmd (opts * Options ) * cobra.Command {
19- var attach bool
20- var noAttach bool
2119 var waitTimeout time.Duration
2220 var dryRun bool
2321
2422 cmd := & cobra.Command {
2523 Use : "up" ,
2624 Short : "Create or resume a dev session" ,
2725 RunE : func (cmd * cobra.Command , args []string ) error {
28- if noAttach {
29- attach = false
30- }
3126 cfg , ns , err := loadConfigAndNamespace (opts )
3227 if err != nil {
3328 return err
@@ -50,9 +45,8 @@ func newUpCmd(opts *Options) *cobra.Command {
5045 }
5146 fmt .Fprintf (cmd .OutOrStdout (), "- would apply pod/%s\n " , pod )
5247 fmt .Fprintf (cmd .OutOrStdout (), "- would wait for pod readiness (timeout=%s)\n " , waitTimeout )
53- if attach {
54- fmt .Fprintln (cmd .OutOrStdout (), "- would attach shell and start background sync/ports/ssh" )
55- }
48+ fmt .Fprintln (cmd .OutOrStdout (), "- would setup SSH config + managed SSH/port-forwards" )
49+ fmt .Fprintln (cmd .OutOrStdout (), "- would start background sync (when sync.engine=syncthing)" )
5650 return nil
5751 }
5852 if err := ensureSessionOwnership (opts , k , ns , sn , true ); err != nil {
@@ -113,56 +107,51 @@ func newUpCmd(opts *Options) *cobra.Command {
113107 }
114108
115109 fmt .Fprintf (cmd .OutOrStdout (), "Session ready: %s (namespace: %s)\n " , sn , ns )
116- if attach {
117- stopMaintenance := startSessionMaintenanceWithClient (k , cfg , ns , sn , cmd .OutOrStdout (), true , true )
118- defer stopMaintenance ()
119-
120- if cfg .Spec .SSH .LocalPort > 0 && cfg .Spec .SSH .RemotePort > 0 {
121- keyPath , keyErr := defaultSSHKeyPath (cfg )
122- if keyErr != nil {
123- fmt .Fprintf (cmd .ErrOrStderr (), "warning: failed to resolve SSH key path: %v\n " , keyErr )
110+ if cfg .Spec .SSH .LocalPort > 0 && cfg .Spec .SSH .RemotePort > 0 {
111+ keyPath , keyErr := defaultSSHKeyPath (cfg )
112+ if keyErr != nil {
113+ fmt .Fprintf (cmd .ErrOrStderr (), "warning: failed to resolve SSH key path: %v\n " , keyErr )
114+ } else {
115+ if err := ensureSSHKeyOnPod (opts , cfg , ns , pod , keyPath ); err != nil {
116+ fmt .Fprintf (cmd .ErrOrStderr (), "warning: failed to setup SSH key in pod: %v\n " , err )
117+ }
118+ alias := sshHostAlias (sn )
119+ cfgPath , _ := config .ResolvePath (opts .ConfigPath )
120+ if cfgErr := ensureSSHConfigEntry (alias , sn , cfg .Spec .SSH .User , cfg .Spec .SSH .LocalPort , cfg .Spec .SSH .RemotePort , keyPath , cfgPath , cfg .Spec .Ports ); cfgErr != nil {
121+ fmt .Fprintf (cmd .ErrOrStderr (), "warning: failed to update ~/.ssh/config: %v\n " , cfgErr )
124122 } else {
125- if err := ensureSSHKeyOnPod (opts , cfg , ns , pod , keyPath ); err != nil {
126- fmt .Fprintf (cmd .ErrOrStderr (), "warning: failed to setup SSH key in pod: %v\n " , err )
123+ // Force-refresh managed master so forward rules are always current after `okdev up`.
124+ _ = stopManagedSSHForward (alias )
125+ if err := startManagedSSHForward (alias ); err != nil {
126+ fmt .Fprintf (cmd .ErrOrStderr (), "warning: failed to start managed SSH/port-forwards: %v\n " , err )
127127 } else {
128- alias := sshHostAlias (sn )
129- cfgPath , _ := config .ResolvePath (opts .ConfigPath )
130- if cfgErr := ensureSSHConfigEntry (alias , sn , cfg .Spec .SSH .User , cfg .Spec .SSH .LocalPort , cfg .Spec .SSH .RemotePort , keyPath , cfgPath , cfg .Spec .Ports ); cfgErr != nil {
131- fmt .Fprintf (cmd .ErrOrStderr (), "warning: failed to update ~/.ssh/config: %v\n " , cfgErr )
132- } else if err := startManagedSSHForward (alias ); err != nil {
133- fmt .Fprintf (cmd .ErrOrStderr (), "warning: failed to start managed SSH/port-forwards: %v\n " , err )
128+ if len (cfg .Spec .Ports ) > 0 {
129+ fmt .Fprintf (cmd .OutOrStdout (), "SSH ready: ssh %s (managed forwards active)\n " , alias )
134130 } else {
135- if len (cfg .Spec .Ports ) > 0 {
136- fmt .Fprintf (cmd .OutOrStdout (), "Background SSH tunnel + port-forwards active via %s\n " , alias )
137- } else {
138- fmt .Fprintf (cmd .OutOrStdout (), "Background SSH tunnel active: ssh %s\n " , alias )
139- }
131+ fmt .Fprintf (cmd .OutOrStdout (), "SSH ready: ssh %s\n " , alias )
140132 }
141133 }
142134 }
143135 }
136+ }
144137
145- if cfg .Spec .Sync .Engine == "" || cfg .Spec .Sync .Engine == "syncthing" {
146- logPath , started , err := startDetachedSyncthingSync (opts , "bi" , sn )
147- if err != nil {
148- fmt .Fprintf (cmd .ErrOrStderr (), "warning: failed to start syncthing background sync: %v\n " , err )
138+ if cfg .Spec .Sync .Engine == "" || cfg .Spec .Sync .Engine == "syncthing" {
139+ logPath , started , err := startDetachedSyncthingSync (opts , "bi" , sn )
140+ if err != nil {
141+ fmt .Fprintf (cmd .ErrOrStderr (), "warning: failed to start syncthing background sync: %v\n " , err )
142+ } else {
143+ if started {
144+ fmt .Fprintf (cmd .OutOrStdout (), "Background syncthing sync active (mode=bi). Logs: %s\n " , logPath )
149145 } else {
150- if started {
151- fmt .Fprintf (cmd .OutOrStdout (), "Background syncthing sync active (mode=bi). Logs: %s\n " , logPath )
152- } else {
153- fmt .Fprintf (cmd .OutOrStdout (), "Background syncthing sync already running (mode=bi). Logs: %s\n " , logPath )
154- }
146+ fmt .Fprintf (cmd .OutOrStdout (), "Background syncthing sync already running (mode=bi). Logs: %s\n " , logPath )
155147 }
156148 }
157-
158- return runConnectWithClient (k , ns , sn , []string {"sh" , "-lc" , "command -v bash >/dev/null 2>&1 && exec bash || exec sh" }, true )
159149 }
150+
160151 return nil
161152 },
162153 }
163154
164- cmd .Flags ().BoolVar (& attach , "attach" , true , "Attach shell after session is ready" )
165- cmd .Flags ().BoolVar (& noAttach , "no-attach" , false , "Do not attach shell/background integrations after session is ready" )
166155 cmd .Flags ().DurationVar (& waitTimeout , "wait-timeout" , 3 * time .Minute , "Wait timeout for pod readiness" )
167156 cmd .Flags ().BoolVar (& dryRun , "dry-run" , false , "Preview actions without applying resources" )
168157 return cmd
0 commit comments