Skip to content

Commit 97b5769

Browse files
committed
[terraform] use oncreate.sh
1 parent 23d2753 commit 97b5769

File tree

3 files changed

+56
-41
lines changed

3 files changed

+56
-41
lines changed

src/terraform-cli-persistence/devcontainer-feature.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,7 @@
1717
"ghcr.io/devcontainers/features/common-utils",
1818
"ghcr.io/meaningful-ooo/devcontainer-features/fish"
1919
],
20-
"postCreateCommand": "/usr/local/share/terraform-cli-persistence-post-create.sh"
20+
"onCreateCommand": {
21+
"terraform-cli-persistence-setup": "/usr/local/share/terraform-cli-persistence/scripts/oncreate.sh"
22+
}
2123
}
Lines changed: 44 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,52 @@
11
#!/bin/sh
2-
set -e
32

3+
USERNAME=${USERNAME:-${_REMOTE_USER}}
44
FEATURE_ID="terraform-cli-persistence"
5-
6-
echo "Activating feature '$FEATURE_ID'"
7-
echo "User: ${_REMOTE_USER} User home: ${_REMOTE_USER_HOME}"
8-
9-
if [ -z "$_REMOTE_USER" ] || [ -z "$_REMOTE_USER_HOME" ]; then
10-
echo "***********************************************************************************"
11-
echo "*** Require _REMOTE_USER and _REMOTE_USER_HOME to be set (by dev container CLI) ***"
12-
echo "***********************************************************************************"
13-
exit 1
14-
fi
15-
16-
# make /dc/terraform-cli folder if doesn't exist
17-
mkdir -p "/dc/terraform-cli"
18-
19-
# as to why we move around the folder, check `github-cli-persistence/install.sh`
20-
if [ -e "$_REMOTE_USER_HOME/.terraform.d" ]; then
21-
echo "Moving existing .terraform.d folder to .terraform.d-old"
22-
mv "$_REMOTE_USER_HOME/.terraform.d" "$_REMOTE_USER_HOME/.terraform.d-old"
23-
fi
24-
25-
ln -s /dc/terraform-cli "$_REMOTE_USER_HOME/.terraform.d"
26-
# chown the entire `.config` folder because devcontainers creates
27-
# a `~/.config/vscode-dev-containers` folder later on
28-
chown -R "${_REMOTE_USER}:${_REMOTE_USER}" "$_REMOTE_USER_HOME/.terraform.d"
29-
30-
# --- Generate a '$FEATURE_ID-post-create.sh' script to be executed by the 'postCreateCommand' lifecycle hook
31-
# Looks like this is the best way to run a script in lifecycle hooks
32-
# Source: https://github.com/devcontainers/features/blob/562305d37b97d47331d96306ffc2a0a3cce55e64/src/git-lfs/install.sh#L190C1-L190C109
33-
POST_CREATE_SCRIPT_PATH="/usr/local/share/$FEATURE_ID-post-create.sh"
34-
35-
tee "$POST_CREATE_SCRIPT_PATH" >/dev/null \
36-
<<'EOF'
37-
#!/bin/sh
5+
LIFECYCLE_SCRIPTS_DIR="/usr/local/share/${FEATURE_ID}/scripts"
386

397
set -e
408

41-
# if the user is not root, chown /dc/aws-cli to the user
42-
if [ "$(id -u)" != "0" ]; then
43-
echo "Running post-start.sh for user $USER"
44-
sudo chown -R "$USER:$USER" /dc/terraform-cli
9+
create_cache_dir() {
10+
if [ -d "$1" ]; then
11+
echo "Cache directory $1 already exists. Skip creation..."
12+
else
13+
echo "Create cache directory $1..."
14+
mkdir -p "$1"
15+
fi
16+
17+
if [ -z "$2" ]; then
18+
echo "No username provided. Skip chown..."
19+
else
20+
echo "Change owner of $1 to $2..."
21+
chown -R "$2:$2" "$1"
22+
fi
23+
}
24+
25+
create_symlink_dir() {
26+
local local_dir=$1
27+
local cache_dir=$2
28+
local username=$3
29+
30+
runuser -u "$username" -- mkdir -p "$(dirname "$local_dir")"
31+
runuser -u "$username" -- mkdir -p "$cache_dir"
32+
33+
# if the folder we want to symlink already exists, the ln -s command will create a folder inside the existing folder
34+
if [ -e "$local_dir" ]; then
35+
echo "Moving existing $local_dir folder to $local_dir-old"
36+
mv "$local_dir" "$local_dir-old"
37+
fi
38+
39+
echo "Symlink $local_dir to $cache_dir for $username..."
40+
runuser -u "$username" -- ln -s "$cache_dir" "$local_dir"
41+
}
42+
43+
create_cache_dir "/dc/terraform-cli" "${USERNAME}"
44+
create_symlink_dir "$_REMOTE_USER_HOME/.terraform.d" "/dc/terraform-cli" "${USERNAME}"
45+
46+
# Set Lifecycle scripts
47+
if [ -f oncreate.sh ]; then
48+
mkdir -p "${LIFECYCLE_SCRIPTS_DIR}"
49+
cp oncreate.sh "${LIFECYCLE_SCRIPTS_DIR}/oncreate.sh"
4550
fi
46-
EOF
4751

48-
chmod 755 "$POST_CREATE_SCRIPT_PATH"
52+
echo "Finished installing $FEATURE_ID"
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/bin/sh
2+
3+
set -e
4+
5+
# if the user is not root, chown /dc/aws-cli to the user
6+
if [ "$(id -u)" != "0" ]; then
7+
echo "Running post-start.sh for user $USER"
8+
sudo chown -R "$USER:$USER" /dc/terraform-cli
9+
fi

0 commit comments

Comments
 (0)