Skip to content

Commit 402185b

Browse files
authored
Create symlink to original .azure folder to preserve cliextensions (#25)
1 parent cb0b64e commit 402185b

File tree

3 files changed

+94
-6
lines changed

3 files changed

+94
-6
lines changed

src/azure-cli-persistence/install.sh

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,32 @@
11
#!/bin/sh
22

3-
LIFECYCLE_SCRIPTS_DIR="/usr/local/share/stuartleeks-devcontainer-features/azure-cli-persistence/scripts"
3+
FEATURE_DIR="/usr/local/share/stuartleeks-devcontainer-features/azure-cli-persistence"
4+
LIFECYCLE_SCRIPTS_DIR="$FEATURE_DIR/scripts"
5+
LOG_FILE="$FEATURE_DIR/log.txt"
46

57
set -e
68

7-
echo "Activating feature 'azure-cli-persistence'"
8-
echo "User: ${_REMOTE_USER} User home: ${_REMOTE_USER_HOME}"
9+
mkdir -p "${FEATURE_DIR}"
910

11+
echo "" > "$LOG_FILE"
12+
log() {
13+
echo "$1"
14+
echo "$1" >> "$LOG_FILE"
15+
}
16+
17+
log "Activating feature 'azure-cli-persistence'"
18+
log "User: ${_REMOTE_USER} User home: ${_REMOTE_USER_HOME}"
19+
20+
got_old_azure_folder=false
1021
if [ -e "$_REMOTE_USER_HOME/.azure" ]; then
11-
echo "Moving existing .azure folder to .azure-old"
22+
log "Moving existing .azure folder to .azure-old"
1223
mv "$_REMOTE_USER_HOME/.azure" "$_REMOTE_USER_HOME/.azure-old"
24+
got_old_azure_folder=true
1325
fi
1426

1527
ln -s /dc/azure/ "$_REMOTE_USER_HOME/.azure"
1628
chown -R "${_REMOTE_USER}:${_REMOTE_USER}" "$_REMOTE_USER_HOME/.azure"
1729

18-
# Set Lifecycle scripts
1930
if [ -f oncreate.sh ]; then
2031
mkdir -p "${LIFECYCLE_SCRIPTS_DIR}"
2132
cp oncreate.sh "${LIFECYCLE_SCRIPTS_DIR}/oncreate.sh"

src/azure-cli-persistence/oncreate.sh

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,22 @@
22

33
set -e
44

5+
FEATURE_DIR="/usr/local/share/stuartleeks-devcontainer-features/azure-cli-persistence"
6+
LOG_FILE="$FEATURE_DIR/log.txt"
7+
8+
log() {
9+
echo "$1"
10+
echo "$1" >> "$LOG_FILE"
11+
}
12+
13+
if command -v sudo > /dev/null; then
14+
sudo chown -R "$(id -u):$(id -g)" "$LOG_FILE"
15+
else
16+
chown -R "$(id -u):$(id -g)" "$LOG_FILE"
17+
fi
18+
19+
log "In OnCreate script"
20+
521
fix_permissions() {
622
local dir
723
dir="${1}"
@@ -16,3 +32,61 @@ fix_permissions() {
1632
}
1733

1834
fix_permissions "/dc/azure"
35+
36+
# Fix up the cliextensions folder in case the user had an old .azure folder
37+
# that had extensions installed in it (e.g. using the azure-cli feature and specifying extensions to install)
38+
39+
if [ -d "$HOME/.azure-old" ]; then
40+
got_old_azure_folder=true
41+
else
42+
got_old_azure_folder=false
43+
fi
44+
45+
46+
old_cliextensions_folder="$HOME/.azure-old/cliextensions"
47+
new_cliextensions_folder="$HOME/.azure/cliextensions"
48+
new_cliextensions_folder_parent="$HOME/.azure"
49+
50+
got_old_extensions_folder=false
51+
52+
if [ "$got_old_azure_folder" = true ]; then
53+
if [ -d "$old_cliextensions_folder" ]; then
54+
got_old_extensions_folder=true
55+
log "cliextensions folder found in old .azure folder"
56+
if [ -d "$new_cliextensions_folder" ]; then
57+
if [ -L "$new_cliextensions_folder" ]; then
58+
symlink_target=$(readlink "$new_cliextensions_folder")
59+
if [ "$symlink_target" = "$old_cliextensions_folder" ]; then
60+
log "cliextensions folder ('$new_cliextensions_folder') already symlinked to '$old_cliextensions_folder' - no action needed"
61+
else
62+
log "cliextensions folder ('$new_cliextensions_folder') is a symlink, but points to a different location ('$symlink_target')"
63+
exit 1
64+
fi
65+
else
66+
log "cliextensions folder ('$new_cliextensions_folder') already exists in but is not a symlink"
67+
exit 1
68+
fi
69+
else
70+
log "cliextensions folder ('$new_cliextensions_folder') does not exist - creating symlink to '$old_cliextensions_folder'"
71+
if command -v sudo > /dev/null; then
72+
sudo ln -s "$old_cliextensions_folder" "$new_cliextensions_folder_parent"
73+
else
74+
ln -s "$old_cliextensions_folder" "$new_cliextensions_folder_parent"
75+
fi
76+
fi
77+
fi
78+
fi
79+
80+
# If we haven't got an old .azure folder with a cliextensions folder in it, check if the new cliextensions folder is a symlink to the old one
81+
# And if so, remove the symlink
82+
# This can happen if the user has installed the azure-cli feature and specified extensions to install
83+
# and then later removed the extensions.
84+
if [ "$got_old_extensions_folder" = false ]; then
85+
if [ -L "$new_cliextensions_folder" ]; then
86+
symlink_target=$(readlink "$new_cliextensions_folder")
87+
if [ "$symlink_target" = "$old_cliextensions_folder" ]; then
88+
log "cliextensions folder ('$new_cliextensions_folder') is a symlink to '$old_cliextensions_folder' - removing symlink"
89+
rm "$new_cliextensions_folder"
90+
fi
91+
fi
92+
fi

test-project/.devcontainer/devcontainer.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@
1010
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
1111
"remoteUser": "vscode",
1212
"features": {
13+
"ghcr.io/devcontainers/features/azure-cli": {
14+
// "extensions": "containerapp,ssh"
15+
},
1316
"ghcr.io/devcontainers-extra/features/fish-apt-get": {},
1417
"./src/shell-history": {},
1518
"./src/azure-cli-persistence": {}
1619
}
17-
}
20+
}

0 commit comments

Comments
 (0)