Skip to content

Commit bee0bba

Browse files
committed
feat(scripts): add default admin password to Kubernetes secrets
Add admin credentials secret creation with default password 'Password12345' for initial setup. Changes include: - New standalone script (create-admin-secret.sh) for creating admin credentials - Updated local-deploy-kubectl.sh to create streamspace-admin-credentials secret - Added ADMIN_PASSWORD environment variable to API deployment The secret uses the expected format: - Secret name: streamspace-admin-credentials - Keys: username, password, email Users should change the password after first login.
1 parent d19d7ef commit bee0bba

2 files changed

Lines changed: 193 additions & 0 deletions

File tree

scripts/create-admin-secret.sh

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
#!/usr/bin/env bash
2+
#
3+
# create-admin-secret.sh - Create Kubernetes secret for admin credentials
4+
#
5+
# This script creates the streamspace-admin-credentials secret with a default
6+
# admin password for initial setup. The password can be changed after deployment.
7+
#
8+
9+
set -euo pipefail
10+
11+
# Colors for output
12+
COLOR_RESET='\033[0m'
13+
COLOR_BOLD='\033[1m'
14+
COLOR_GREEN='\033[32m'
15+
COLOR_YELLOW='\033[33m'
16+
COLOR_BLUE='\033[34m'
17+
COLOR_RED='\033[31m'
18+
19+
# Configuration
20+
NAMESPACE="${NAMESPACE:-streamspace}"
21+
SECRET_NAME="streamspace-admin-credentials"
22+
ADMIN_USERNAME="admin"
23+
ADMIN_PASSWORD="${ADMIN_PASSWORD:-Password12345}"
24+
ADMIN_EMAIL="${ADMIN_EMAIL:-admin@streamspace.local}"
25+
26+
# Helper functions
27+
log() {
28+
echo -e "${COLOR_BOLD}==>${COLOR_RESET} $*"
29+
}
30+
31+
log_success() {
32+
echo -e "${COLOR_GREEN}${COLOR_RESET} $*"
33+
}
34+
35+
log_error() {
36+
echo -e "${COLOR_RED}${COLOR_RESET} $*" >&2
37+
}
38+
39+
log_info() {
40+
echo -e "${COLOR_BLUE}${COLOR_RESET} $*"
41+
}
42+
43+
log_warning() {
44+
echo -e "${COLOR_YELLOW}${COLOR_RESET} $*"
45+
}
46+
47+
# Check prerequisites
48+
check_prerequisites() {
49+
if ! command -v kubectl &> /dev/null; then
50+
log_error "kubectl is not installed or not in PATH"
51+
exit 1
52+
fi
53+
54+
if ! kubectl cluster-info &> /dev/null; then
55+
log_error "Cannot connect to Kubernetes cluster"
56+
exit 1
57+
fi
58+
}
59+
60+
# Create admin credentials secret
61+
create_admin_secret() {
62+
log "Creating admin credentials secret..."
63+
64+
# Check if namespace exists
65+
if ! kubectl get namespace "${NAMESPACE}" &> /dev/null; then
66+
log_warning "Namespace ${NAMESPACE} does not exist, creating..."
67+
kubectl create namespace "${NAMESPACE}"
68+
fi
69+
70+
# Check if secret already exists
71+
if kubectl get secret "${SECRET_NAME}" -n "${NAMESPACE}" &> /dev/null; then
72+
log_warning "Secret ${SECRET_NAME} already exists in namespace ${NAMESPACE}"
73+
log_info "To recreate, delete it first:"
74+
log_info " kubectl delete secret ${SECRET_NAME} -n ${NAMESPACE}"
75+
return 0
76+
fi
77+
78+
# Create the secret
79+
kubectl create secret generic "${SECRET_NAME}" \
80+
-n "${NAMESPACE}" \
81+
--from-literal=username="${ADMIN_USERNAME}" \
82+
--from-literal=password="${ADMIN_PASSWORD}" \
83+
--from-literal=email="${ADMIN_EMAIL}"
84+
85+
# Add labels to match the Helm chart pattern
86+
kubectl label secret "${SECRET_NAME}" \
87+
-n "${NAMESPACE}" \
88+
app.kubernetes.io/name=streamspace \
89+
app.kubernetes.io/component=admin \
90+
app.kubernetes.io/managed-by=kubectl
91+
92+
log_success "Admin credentials secret created successfully"
93+
log_info "Secret name: ${SECRET_NAME}"
94+
log_info "Namespace: ${NAMESPACE}"
95+
log_info "Username: ${ADMIN_USERNAME}"
96+
log_info "Email: ${ADMIN_EMAIL}"
97+
log_warning "Default password is set. Please change it after first login!"
98+
}
99+
100+
# Show usage
101+
show_usage() {
102+
echo "Usage: $0 [OPTIONS]"
103+
echo ""
104+
echo "Create Kubernetes secret for StreamSpace admin credentials."
105+
echo ""
106+
echo "Options:"
107+
echo " -h, --help Show this help message"
108+
echo " -n, --namespace Kubernetes namespace (default: streamspace)"
109+
echo " -p, --password Admin password (default: Password12345)"
110+
echo " -e, --email Admin email (default: admin@streamspace.local)"
111+
echo ""
112+
echo "Environment Variables:"
113+
echo " NAMESPACE Kubernetes namespace"
114+
echo " ADMIN_PASSWORD Admin password"
115+
echo " ADMIN_EMAIL Admin email"
116+
echo ""
117+
echo "Examples:"
118+
echo " $0 # Use defaults"
119+
echo " $0 -n myspace -p MySecret # Custom namespace and password"
120+
echo " ADMIN_PASSWORD=secret $0 # Use environment variable"
121+
}
122+
123+
# Parse arguments
124+
parse_args() {
125+
while [[ $# -gt 0 ]]; do
126+
case $1 in
127+
-h|--help)
128+
show_usage
129+
exit 0
130+
;;
131+
-n|--namespace)
132+
NAMESPACE="$2"
133+
shift 2
134+
;;
135+
-p|--password)
136+
ADMIN_PASSWORD="$2"
137+
shift 2
138+
;;
139+
-e|--email)
140+
ADMIN_EMAIL="$2"
141+
shift 2
142+
;;
143+
*)
144+
log_error "Unknown option: $1"
145+
show_usage
146+
exit 1
147+
;;
148+
esac
149+
done
150+
}
151+
152+
# Main execution
153+
main() {
154+
parse_args "$@"
155+
156+
echo -e "${COLOR_BOLD}═══════════════════════════════════════════════════${COLOR_RESET}"
157+
echo -e "${COLOR_BOLD} StreamSpace Admin Credentials Setup${COLOR_RESET}"
158+
echo -e "${COLOR_BOLD}═══════════════════════════════════════════════════${COLOR_RESET}"
159+
echo ""
160+
161+
check_prerequisites
162+
create_admin_secret
163+
164+
echo ""
165+
echo -e "${COLOR_BOLD}═══════════════════════════════════════════════════${COLOR_RESET}"
166+
log_success "Admin credentials secret setup complete!"
167+
echo -e "${COLOR_BOLD}═══════════════════════════════════════════════════${COLOR_RESET}"
168+
}
169+
170+
main "$@"

scripts/local-deploy-kubectl.sh

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,23 @@ create_secrets() {
122122
--from-literal=api-key=$(openssl rand -hex 32)
123123
log_success "Secrets created"
124124
fi
125+
126+
# Create admin credentials secret
127+
if kubectl get secret streamspace-admin-credentials -n "${NAMESPACE}" &> /dev/null; then
128+
log_warning "Secret streamspace-admin-credentials already exists"
129+
else
130+
kubectl create secret generic streamspace-admin-credentials \
131+
-n "${NAMESPACE}" \
132+
--from-literal=username=admin \
133+
--from-literal=password=Password12345 \
134+
--from-literal=email=admin@streamspace.local
135+
kubectl label secret streamspace-admin-credentials \
136+
-n "${NAMESPACE}" \
137+
app.kubernetes.io/name=streamspace \
138+
app.kubernetes.io/component=admin \
139+
app.kubernetes.io/managed-by=kubectl
140+
log_success "Admin credentials secret created"
141+
fi
125142
}
126143

127144
# Deploy PostgreSQL
@@ -377,6 +394,12 @@ spec:
377394
secretKeyRef:
378395
name: streamspace-secrets
379396
key: jwt-secret
397+
- name: ADMIN_PASSWORD
398+
valueFrom:
399+
secretKeyRef:
400+
name: streamspace-admin-credentials
401+
key: password
402+
optional: true
380403
- name: NAMESPACE
381404
valueFrom:
382405
fieldRef:

0 commit comments

Comments
 (0)