Skip to content

Commit d6676d5

Browse files
authored
feat: Upload secrets to HPC cluster (#1159)
1 parent b9110cc commit d6676d5

1 file changed

Lines changed: 63 additions & 2 deletions

File tree

internal/remote/firecrest/controller.go

Lines changed: 63 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,58 @@ func (c *FirecrestRemoteSessionController) Status(ctx context.Context) (state mo
126126
return c.currentStatus, c.currentStatusError
127127
}
128128

129+
func (c *FirecrestRemoteSessionController) uploadSecrets(ctx context.Context, remoteSecretsPath string) error {
130+
var err error
131+
132+
localSessionSecretsFolder, exists := os.LookupEnv("RENKU_SECRETS_PATH")
133+
if !exists {
134+
localSessionSecretsFolder = "/secrets"
135+
}
136+
137+
files, err := os.ReadDir(localSessionSecretsFolder)
138+
if err != nil {
139+
if os.IsNotExist(err) {
140+
// The folder does not exist if there are no user secrets defined.
141+
return nil
142+
}
143+
return err
144+
}
145+
146+
// Ensure the remote folder exists
147+
err = c.mkdir(ctx, remoteSecretsPath, true)
148+
if err != nil {
149+
return err
150+
}
151+
152+
err = c.chmod(ctx, remoteSecretsPath, "700")
153+
if err != nil {
154+
return err
155+
}
156+
157+
for _, file := range files {
158+
if file.IsDir() {
159+
// Ignore hierarchies for now, this will also skip "." and ".." as both are folders
160+
continue
161+
}
162+
var content []byte
163+
name := file.Name()
164+
content, err = os.ReadFile(path.Join(localSessionSecretsFolder, name))
165+
if err != nil {
166+
return err
167+
}
168+
err = c.uploadFile(ctx, remoteSecretsPath, name, content)
169+
if err != nil {
170+
return err
171+
}
172+
err = c.chmod(ctx, path.Join(remoteSecretsPath, name), "400")
173+
if err != nil {
174+
return err
175+
}
176+
}
177+
178+
return nil
179+
}
180+
129181
// Start sets up and starts the remote session using the FirecREST API
130182
//
131183
//nolint:gocyclo // TODO: can we break down session start?
@@ -211,8 +263,17 @@ func (c *FirecrestRemoteSessionController) Start(ctx context.Context) error {
211263
if err != nil {
212264
return err
213265
}
266+
err = c.chmod(startCtx, path.Join(secretsPath, "wstunnel_secret"), "400")
267+
if err != nil {
268+
return err
269+
}
270+
}
271+
// Upload user secrets into secretsPath
272+
userSecretsPath := path.Join(secretsPath, "user")
273+
err = c.uploadSecrets(startCtx, userSecretsPath)
274+
if err != nil {
275+
return err
214276
}
215-
// TODO: upload user secrets into secretsPath
216277

217278
// Setup git repositories
218279
renkuWorkDir := os.Getenv("RENKU_WORKING_DIR")
@@ -291,7 +352,7 @@ func (c *FirecrestRemoteSessionController) Start(ctx context.Context) error {
291352
env["GIT_PROXY_HEALTH_PORT"] = fmt.Sprintf("%d", 65481) // git proxy port
292353

293354
// Upload the session script
294-
sessionScriptFinal := c.renderSessionScript(sessionScript, system.FileSystems, secretsPath)
355+
sessionScriptFinal := c.renderSessionScript(sessionScript, system.FileSystems, userSecretsPath)
295356
err = c.uploadFile(ctx, sessionPath, "session_script.sh", []byte(sessionScriptFinal))
296357
if err != nil {
297358
return err

0 commit comments

Comments
 (0)