90 lines
3.4 KiB
YAML
90 lines
3.4 KiB
YAML
apiVersion: batch/v1
|
|
kind: Job
|
|
metadata:
|
|
name: 'tenant-{{ .Values.name }}-minio-setup'
|
|
namespace: minio
|
|
annotations:
|
|
argocd.argoproj.io/sync-wave: "-1"
|
|
argocd.argoproj.io/hook: Sync
|
|
argocd.argoproj.io/hook-delete-policy: HookSucceeded
|
|
spec:
|
|
ttlSecondsAfterFinished: 100
|
|
template:
|
|
spec:
|
|
serviceAccountName: minio-provisioner
|
|
restartPolicy: OnFailure
|
|
imagePullSecrets:
|
|
- name: registry-credentials
|
|
containers:
|
|
- name: setup
|
|
image: registry.bouvais.lu/minio-runner:1.0.0
|
|
command: ["/bin/sh", "-c"]
|
|
args:
|
|
- |
|
|
set -e
|
|
|
|
# Generate password
|
|
SCOPED_SECRET=$(tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 32)
|
|
|
|
# Configure MinIO alias
|
|
mc alias set local http://minio.minio.svc:9000 \
|
|
"$MINIO_ROOT_USER" "$MINIO_ROOT_PASSWORD"
|
|
|
|
# Create buckets
|
|
mc mb -p local/{{ .Values.name }}-ref local/{{ .Values.name }}-work
|
|
|
|
# Create user with generated credentials
|
|
mc admin user add local {{ .Values.name }}-user "$SCOPED_SECRET"
|
|
|
|
# Inline policy generation to avoid missing mount issues
|
|
cat <<EOF > /tmp/policy.json
|
|
{
|
|
"Version": "2012-10-17",
|
|
"Statement": [
|
|
{
|
|
"Sid": "ReadOnlyRefBucket",
|
|
"Effect": "Allow",
|
|
"Action": [
|
|
"s3:GetBucketLocation",
|
|
"s3:ListBucket",
|
|
"s3:GetObject"
|
|
],
|
|
"Resource": [
|
|
"arn:aws:s3:::{{ .Values.name }}-ref",
|
|
"arn:aws:s3:::{{ .Values.name }}-ref/*"
|
|
]
|
|
},
|
|
{
|
|
"Sid": "ReadWriteWorkBucket",
|
|
"Effect": "Allow",
|
|
"Action": [
|
|
"s3:*"
|
|
],
|
|
"Resource": [
|
|
"arn:aws:s3:::{{ .Values.name }}-work",
|
|
"arn:aws:s3:::{{ .Values.name }}-work/*"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
EOF
|
|
# Apply policy and attach to user
|
|
mc admin policy create local {{ .Values.name }}-policy /tmp/policy.json
|
|
mc admin policy attach local {{ .Values.name }}-policy --user {{ .Values.name }}-user
|
|
|
|
# Create target secret with matching credentials
|
|
kubectl create secret generic {{ .Values.name }}-s3-credentials \
|
|
--from-literal=AWS_ACCESS_KEY_ID={{ .Values.name }}-user \
|
|
--from-literal=AWS_SECRET_ACCESS_KEY="$SCOPED_SECRET" \
|
|
-n minio --dry-run=client -o yaml | kubectl apply -f -
|
|
|
|
# Annotate for Emberstack Reflector
|
|
kubectl annotate secret {{ .Values.name }}-s3-credentials -n minio --overwrite \
|
|
reflector.v1.k8s.emberstack.com/reflection-allowed="true" \
|
|
reflector.v1.k8s.emberstack.com/reflection-auto-enabled="true" \
|
|
reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces="tenant-{{ .Values.name }}" \
|
|
reflector.v1.k8s.emberstack.com/reflection-auto-namespaces="tenant-{{ .Values.name }}"
|
|
envFrom:
|
|
- secretRef:
|
|
name: minio-admin-credentials
|