@@ -30,8 +30,14 @@ func configureSSHConfig(host, port string, log log.Logger) error {
3030 return errors .Wrap (err , "get home dir" )
3131 }
3232
33+ devSpaceSSHConfigPath := filepath .Join (homeDir , ".ssh" , "devspace_config" )
34+ newFile , err := addHost (devSpaceSSHConfigPath , host , port )
35+ if err != nil {
36+ return errors .Wrap (err , "parse devspace ssh config" )
37+ }
38+
3339 sshConfigPath := filepath .Join (homeDir , ".ssh" , "config" )
34- newFile , err := addHost (sshConfigPath , host , port )
40+ newSSHFile , err := includeDevSpaceConfig (sshConfigPath )
3541 if err != nil {
3642 return errors .Wrap (err , "parse ssh config" )
3743 }
@@ -41,9 +47,16 @@ func configureSSHConfig(host, port string, log log.Logger) error {
4147 log .Debugf ("error creating ssh directory: %v" , err )
4248 }
4349
44- err = ioutil .WriteFile (sshConfigPath , []byte (newFile ), 0600 )
50+ if newSSHFile != "" {
51+ err = ioutil .WriteFile (sshConfigPath , []byte (newSSHFile ), 0600 )
52+ if err != nil {
53+ return errors .Wrap (err , "write ssh config" )
54+ }
55+ }
56+
57+ err = ioutil .WriteFile (devSpaceSSHConfigPath , []byte (newFile ), 0600 )
4558 if err != nil {
46- return errors .Wrap (err , "write ssh config" )
59+ return errors .Wrap (err , "write devspace ssh config" )
4760 }
4861
4962 return nil
@@ -107,6 +120,42 @@ func ParseDevSpaceHosts(path string) ([]DevSpaceSSHEntry, error) {
107120 return entries , nil
108121}
109122
123+ func includeDevSpaceConfig (path string ) (string , error ) {
124+ var reader io.Reader
125+ f , err := os .Open (path )
126+ if err != nil {
127+ if ! os .IsNotExist (err ) {
128+ return "" , err
129+ }
130+
131+ reader = strings .NewReader ("" )
132+ } else {
133+ reader = f
134+ defer f .Close ()
135+ }
136+
137+ configScanner := scanner .NewScanner (reader )
138+ newLines := []string {}
139+ startMarker := "# DevSpace Start"
140+ for configScanner .Scan () {
141+ text := configScanner .Text ()
142+ if strings .HasPrefix (text , startMarker ) {
143+ return "" , nil
144+ }
145+
146+ newLines = append (newLines , text )
147+ }
148+ if configScanner .Err () != nil {
149+ return "" , errors .Wrap (err , "parse ssh config" )
150+ }
151+
152+ // add new section
153+ newLines = append (newLines , startMarker )
154+ newLines = append (newLines , "Include devspace_config" )
155+ newLines = append (newLines , "# DevSpace End" )
156+ return strings .Join (newLines , "\n " ), nil
157+ }
158+
110159func addHost (path , host , port string ) (string , error ) {
111160 var reader io.Reader
112161 f , err := os .Open (path )
0 commit comments