Skip to content

Commit bf5d8b9

Browse files
authored
Merge pull request #2114 from FabianKramm/print-feat
refactor: include separate ssh file
2 parents 7d44802 + 9a27eb8 commit bf5d8b9

1 file changed

Lines changed: 52 additions & 3 deletions

File tree

pkg/devspace/services/ssh/config.go

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
110159
func addHost(path, host, port string) (string, error) {
111160
var reader io.Reader
112161
f, err := os.Open(path)

0 commit comments

Comments
 (0)