Skip to content

Commit 4b2d385

Browse files
authored
Support CodeEditor persistent settings in v3 (#547)
1 parent 1c6e102 commit 4b2d385

File tree

3 files changed

+66
-3
lines changed

3 files changed

+66
-3
lines changed

template/v3/dirs/etc/supervisor/conf.d/supervisord-code-editor.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ command=start-code-editor
77
autostart=true
88
autorestart=true
99
stdout_logfile=/dev/fd/1 ; Redirect web server logs to stdout
10+
stderr_logfile=/dev/fd/1
1011
stdout_logfile_maxbytes = 0 ; Fix: https://github.com/Supervisor/supervisor/issues/935
1112
stderr_logfile_maxbytes = 0 ; Fix: https://github.com/Supervisor/supervisor/issues/935
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import json
2+
from sys import argv
3+
4+
5+
# merges json files file1 and file2, keys in file2 overwriting any keys that already exist in file1
6+
def main():
7+
file1, file2 = argv[1], argv[2]
8+
# Read JSON data from files
9+
with open(file1, "r") as f1, open(file2, "r") as f2:
10+
data1 = json.load(f1)
11+
data2 = json.load(f2)
12+
13+
# Merge the data (simple update)
14+
merged_data = {**data1, **data2}
15+
16+
# Write the merged data to a new file
17+
with open(file1, "w") as f:
18+
json.dump(merged_data, f)
19+
20+
21+
if __name__ == "__main__":
22+
main()

template/v3/dirs/usr/local/bin/start-code-editor

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,59 @@
11
#!/bin/bash
22
set -e
33

4+
EFS_MOUNT_POINT="/opt/amazon/sagemaker"
5+
EBS_MOUNT_POINT="/home/sagemaker-user"
6+
7+
persistent_settings_folder="${EBS_MOUNT_POINT}/sagemaker-code-editor-server-data"
8+
default_settings_folder="${EFS_MOUNT_POINT}/sagemaker-code-editor-server-data"
9+
10+
override_machine_settings() {
11+
# create a new settings file with preset defaults or merge the defaults into the existing settings file
12+
local settings_relative_path="data/Machine"
13+
local settings_file_path_suffix="${settings_relative_path}/settings.json"
14+
local persistent_machine_settings_file="${persistent_settings_folder}/${settings_file_path_suffix}"
15+
local default_machine_settings_file="${default_settings_folder}/${settings_file_path_suffix}"
16+
17+
if [ ! -f "$persistent_machine_settings_file" ]; then
18+
# copy settings file to EBS if it doesn't exist in EBS
19+
mkdir -p "${persistent_settings_folder}/${settings_relative_path}"
20+
cp "$default_machine_settings_file" "$persistent_machine_settings_file"
21+
echo "Created persistent settings file with default settings at $persistent_machine_settings_file"
22+
else
23+
# if it does exist then merge settings
24+
echo "File already exists: ${persistent_machine_settings_file}. Merging default settings with existing settings."
25+
python3 /usr/local/bin/merge-settings-util.py "$persistent_machine_settings_file" "$default_machine_settings_file"
26+
fi
27+
}
28+
29+
copy_user_settings() {
30+
local settings_relative_path="data/User"
31+
local settings_file_path_suffix="${settings_relative_path}/settings.json"
32+
local persistent_user_settings_file="${persistent_settings_folder}/${settings_file_path_suffix}"
33+
local default_user_settings_file="${default_settings_folder}/${settings_file_path_suffix}"
34+
if [ ! -f "$persistent_user_settings_file" ]; then
35+
# copy user settings file to EBS if it doesn't exist in EBS
36+
mkdir -p "${persistent_settings_folder}/${settings_relative_path}"
37+
cp "$default_user_settings_file" "$persistent_user_settings_file"
38+
echo "Created persistent settings file with default settings at $persistent_user_settings_file"
39+
fi
40+
}
41+
442
eval "$(micromamba shell hook --shell=bash)"
543

644
# Activate conda environment 'base', which is the default environment for sagemaker-distribution
745
micromamba activate base
846

947
# Start code-editor server
1048
if [ -n "$SAGEMAKER_APP_TYPE_LOWERCASE" ]; then
11-
# SAGEMAKER_APP_TYPE is set, indicating the server is running within a SageMaker
12-
# app. Configure the base url to be `/<app-type-in-lower-case>/default`.
49+
# SAGEMAKER_APP_TYPE is set, indicating the server is running within a SageMaker app.
50+
override_machine_settings
51+
copy_user_settings
52+
# Configure the base url to be `/<app-type-in-lower-case>/default`.
1353
sagemaker-code-editor --host 0.0.0.0 --port 8888 \
1454
--without-connection-token \
1555
--base-path "/$SAGEMAKER_APP_TYPE_LOWERCASE/default" \
16-
--server-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data \
56+
--server-data-dir $persistent_settings_folder \
1757
--extensions-dir /opt/amazon/sagemaker/sagemaker-code-editor-server-data/extensions \
1858
--user-data-dir /opt/amazon/sagemaker/sagemaker-code-editor-user-data
1959
else

0 commit comments

Comments
 (0)