Skip to content

Commit ee1402d

Browse files
committed
Enhance MinIO user and policy management in scripts. Added user existence checks and improved error handling. Introduced a healthcheck script for verifying MinIO setup. Updated Dockerfile to include healthcheck and adjusted sleep behavior in create-user script.
1 parent b8ecadc commit ee1402d

File tree

4 files changed

+113
-14
lines changed

4 files changed

+113
-14
lines changed

src/Dockerfile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# syntax=docker/dockerfile:1
2+
# check=skip=SecretsUsedInArgOrEnv
23
FROM minio/mc:latest
34

45
ENV DEBUG=false \
@@ -19,10 +20,10 @@ ENV DEBUG=false \
1920
RUN mkdir -p /policies
2021
COPY --chmod=700 entrypoint.sh /entrypoint.sh
2122
COPY --chmod=700 create-user.sh /create-user.sh
22-
23+
COPY --chmod=700 healthcheck.sh /healthcheck.sh
2324
ENTRYPOINT ["/entrypoint.sh"]
2425

2526
CMD ["/create-user.sh"]
2627

27-
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
28-
CMD [ -f "/etc/letsencrypt/live/$(echo "$CERTBOT_DOMAINS" | cut -d',' -f1)/fullchain.pem" ]
28+
HEALTHCHECK --interval=168h --timeout=10s --start-period=5s --retries=3 \
29+
CMD ["/healthcheck.sh"]

src/create-user.sh

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,35 @@ debug_print() {
2828

2929
sleep_or_exit() {
3030
if [ "$SLEEP" = "true" ]; then
31-
echo "NOTICE: Sleeping indefinitely..."
32-
sleep infinity
31+
echo "✅ MinIO user, bucket, and policy created successfully. Sleeping indefinitely..."
32+
# Start a background process and wait for it
33+
# This will sleep until a signal is received
34+
sleep infinity &
35+
wait $!
3336
else
34-
echo "NOTICE: Exiting..."
37+
echo "✅ MinIO user, bucket, and policy created successfully. Exiting..."
3538
exit 0
3639
fi
3740
}
3841

42+
check_alias_exists() {
43+
local alias_list
44+
alias_list=$($mc_cmd alias list)
45+
case "$alias_list" in
46+
*"$MINIO_ALIAS"*) return 0 ;;
47+
*) return 1 ;;
48+
esac
49+
}
50+
51+
check_policy_exists() {
52+
local policy_list
53+
policy_list=$($mc_cmd admin policy list)
54+
case "$policy_list" in
55+
*"$minio_policy_name"*) return 0 ;;
56+
*) return 1 ;;
57+
esac
58+
}
59+
3960
################################################################################
4061
# Main
4162
################################################################################
@@ -49,23 +70,23 @@ if [ "$MINIO_ACCESS_KEY_EXISTS" = "true" ]; then
4970
fi
5071

5172
# Ensure alias is set
52-
if ! $mc_cmd alias list | grep -q "$MINIO_ALIAS"; then
73+
if ! check_alias_exists; then
5374
echo "ERROR: Alias $MINIO_ALIAS not found"
5475
exit 1
5576
fi
5677

5778
# Ensure bucket exists
58-
$mc_cmd mb "$MINIO_ALIAS/$MINIO_BUCKET_NAME" --ignore-existing
79+
$mc_cmd mb "$MINIO_ALIAS/$MINIO_USER_BUCKET_NAME" --ignore-existing
5980

6081
# Create policy if it doesn't exist
61-
if ! $mc_cmd admin policy list | grep -q "$minio_policy_name"; then
82+
if ! check_policy_exists; then
6283
echo "NOTICE: Policy $minio_policy_name not found. Creating..."
6384
$mc_cmd admin policy create "$MINIO_ALIAS" "$minio_policy_name" "$MINIO_POLICY_PATH"
6485
fi
6586

6687
# Create user and apply policy
67-
$mc_cmd admin user create "$MINIO_ALIAS" "$MINIO_USER_ACCESS_KEY" "$minio_policy_name"
68-
$mc_cmd admin policy attach "$MINIO_ALIAS" "$minio_policy_name" "$MINIO_USER_ACCESS_KEY"
88+
$mc_cmd admin user add "$MINIO_ALIAS" "$MINIO_USER_ACCESS_KEY" "$minio_policy_name"
89+
$mc_cmd admin policy attach "$MINIO_ALIAS" "$minio_policy_name" --user "$MINIO_USER_ACCESS_KEY"
6990

7091
# Sleep or exit
7192
sleep_or_exit

src/entrypoint.sh

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,15 @@ debug_print() {
8585
fi
8686
}
8787

88+
check_user_exists() {
89+
local user_list
90+
user_list=$(mc admin user ls "$MINIO_ALIAS")
91+
case "$user_list" in
92+
*"$MINIO_USER_ACCESS_KEY"*) return 0 ;;
93+
*) return 1 ;;
94+
esac
95+
}
96+
8897
validate_environment_variables() {
8998
# Validate required environment variables
9099
required_vars="
@@ -98,7 +107,6 @@ validate_environment_variables() {
98107
MINIO_USER_BUCKET_PERMISSIONS
99108
MINIO_USER_OBJECT_PERMISSIONS
100109
MINIO_USER_SECRET_KEY
101-
MINIO_USER_ACCESS_KEY
102110
"
103111

104112
for var in $required_vars; do
@@ -138,7 +146,7 @@ cat <<"EOF"
138146
|| ||
139147
EOF
140148
echo "🌐 MinIO Host: $MINIO_HOST"
141-
echo "🔑 MinIO Access Key: $MINIO_ACCESS_KEY"
149+
echo "🔑 MinIO Access Key: $MINIO_USER_ACCESS_KEY"
142150
echo "📝 Policy Path: $MINIO_POLICY_PATH"
143151
echo "🛠️ MinIO Version:"
144152
mc --version
@@ -147,7 +155,7 @@ echo "-----------------------------------------------------------"
147155
set_mc_alias
148156

149157
# Check to see if user exists
150-
if mc admin user ls "$MINIO_ALIAS" | grep -q "$MINIO_USER_ACCESS_KEY"; then
158+
if check_user_exists; then
151159
echo "NOTICE: Detected that user $MINIO_USER_ACCESS_KEY already exists."
152160
MINIO_ACCESS_KEY_EXISTS=true
153161
exit_and_execute_docker_command "$@"

src/healthcheck.sh

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# Debug mode
5+
if [ "$DEBUG" = "true" ]; then
6+
set -x
7+
fi
8+
9+
echo "Starting health check..."
10+
11+
# Get policy name from path
12+
minio_policy_name=$(basename "$MINIO_POLICY_PATH" .json | tr '[:upper:]' '[:lower:]' | tr -cd '[:alnum:]-_')
13+
echo "Checking for policy: $minio_policy_name"
14+
15+
# Check if alias exists
16+
echo "Checking MinIO alias..."
17+
alias_list=$(mc alias list)
18+
case "$alias_list" in
19+
*"$MINIO_ALIAS"*)
20+
echo "✅ MinIO alias found"
21+
;;
22+
*)
23+
echo "ERROR: MinIO alias $MINIO_ALIAS not found"
24+
exit 1
25+
;;
26+
esac
27+
28+
# Check if user exists
29+
echo "Checking MinIO user..."
30+
user_list=$(mc admin user ls "$MINIO_ALIAS")
31+
case "$user_list" in
32+
*"$MINIO_USER_ACCESS_KEY"*)
33+
echo "✅ MinIO user found"
34+
;;
35+
*)
36+
echo "ERROR: MinIO user $MINIO_USER_ACCESS_KEY not found"
37+
exit 1
38+
;;
39+
esac
40+
41+
# Check if policy exists
42+
echo "Checking MinIO policy..."
43+
policy_list=$(mc admin policy list "$MINIO_ALIAS")
44+
case "$policy_list" in
45+
*"$minio_policy_name"*)
46+
echo "✅ MinIO policy found"
47+
;;
48+
*)
49+
echo "ERROR: MinIO policy $minio_policy_name not found"
50+
exit 1
51+
;;
52+
esac
53+
54+
# Check if bucket exists
55+
echo "Checking MinIO bucket..."
56+
bucket_list=$(mc ls "$MINIO_ALIAS")
57+
case "$bucket_list" in
58+
*"$MINIO_USER_BUCKET_NAME"*)
59+
echo "✅ MinIO bucket found"
60+
;;
61+
*)
62+
echo "ERROR: MinIO bucket $MINIO_USER_BUCKET_NAME not found"
63+
exit 1
64+
;;
65+
esac
66+
67+
# All checks passed
68+
echo "✅ Health check passed: User, policy, and bucket exist"
69+
exit 0

0 commit comments

Comments
 (0)