Skip to content

Commit beb7a02

Browse files
authored
Merge pull request #1 from WyriHaximusNet/add-docker-image
Add Docker image building blocks
2 parents 037d8ba + 2eeec65 commit beb7a02

File tree

4 files changed

+93
-0
lines changed

4 files changed

+93
-0
lines changed

Dockerfile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
FROM flant/shell-operator:latest-alpine3.12
2+
3+
RUN apk add --no-cache redis
4+
5+
ADD hooks /hooks
6+
ADD engine /engine

engine/add.sh

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#!/usr/bin/env bash
2+
3+
json=$(echo "$1")
4+
name=$(echo "$json" | jq -r '.metadata.name')
5+
namespace=$(echo "$json" | jq -r '.metadata.namespace')
6+
kind=$(echo "$json" | jq -r '.kind')
7+
secret=$(echo "$json" | jq -r '.spec.secret.name')
8+
read=$(echo "$json" | jq -r '.spec.service.read')
9+
write=$(echo "$json" | jq -r '.spec.service.read')
10+
echo "${namespace}/${name} object is added"
11+
echo "${namespace}/${secret} is target secret"
12+
echo "${read} is read service"
13+
echo "${write} is write service"
14+
15+
(kubectl get secret -n "${namespace}" "${secret}")
16+
if [[ "$?" == "1" ]] ; then
17+
maxDatabases=$(redis-cli -u "${write}" CONFIG GET databases | grep -v databases)
18+
redisServerIsKnown=$(kubectl get configmap redis-database-assignment-operator-in-use-dbs-list -o json | jq -r -c '.data.dbs' | jq -r ".\"${write}\"" | wc -l)
19+
if [[ "$redisServerIsKnown" == "1" ]] ; then
20+
kubectl create configmap redis-database-assignment-operator-in-use-dbs-list --from-literal=dbs=$(kubectl get configmap redis-database-assignment-operator-in-use-dbs-list -o json | jq -r '.data.dbs' | jq -r ". * {\"${write}\": {}}" | jq -c) --dry-run -o yaml | kubectl apply -f -
21+
for i in $(seq 0 $maxDatabases);
22+
do
23+
kubectl create configmap redis-database-assignment-operator-in-use-dbs-list --from-literal=dbs=$(kubectl get configmap redis-database-assignment-operator-in-use-dbs-list -o json | jq -r '.data.dbs' | jq -r ". * {\"${write}\": {\"db${i}\": \"free\"}}" | jq -c) --dry-run -o yaml | kubectl apply -f -
24+
done
25+
fi
26+
27+
echo "Secret ${namespace}/${secret} doesn't exist"
28+
29+
for i in $(seq 0 $maxDatabases);
30+
do
31+
isDatabaseFree=$(kubectl get configmap redis-database-assignment-operator-in-use-dbs-list -o json | jq -r '.data.dbs' | jq ".[\"${write}\"].db${i}" | grep free | wc -l)
32+
if [[ "$isDatabaseFree" == "1" ]] ; then
33+
echo "Database ${i} is available"
34+
kubectl create secret generic "${secret}" -n "${namespace}" --from-literal=database="${i}" --from-literal=read="${read}" --from-literal=write="${write}"
35+
kubectl create configmap redis-database-assignment-operator-in-use-dbs-list --from-literal=dbs=$(kubectl get configmap redis-database-assignment-operator-in-use-dbs-list -o json | jq -r '.data.dbs' | jq -r ". * {\"${write}\": {\"db${i}\": \"${namespace}/${secret}\"}}" | jq -c) --dry-run -o yaml | kubectl apply -f -
36+
echo "Database ${i} has now been claimed"
37+
break
38+
fi
39+
done
40+
else
41+
echo "Secret ${namespace}/${secret} exists, no need to do anything"
42+
fi

hooks/add.sh

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/usr/bin/env bash
2+
3+
if [[ $1 == "--config" ]] ; then
4+
cat <<EOF
5+
{
6+
"configVersion":"v1",
7+
"kubernetes":[{
8+
"apiVersion": "wyrihaximus.net/v1",
9+
"kind": "RedisDatabase",
10+
"executeHookOnEvent":["Added"]
11+
}]
12+
}
13+
EOF
14+
else
15+
type=$(jq -r '.[0].type' ${BINDING_CONTEXT_PATH})
16+
echo "Event: ${type}"
17+
if [[ $type == "Event" ]] ; then
18+
/engine/add.sh $(jq -r -c '.[0].object' ${BINDING_CONTEXT_PATH})
19+
fi
20+
fi

hooks/start-up.sh

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/usr/bin/env bash
2+
3+
if [[ $1 == "--config" ]] ; then
4+
cat <<EOF
5+
{
6+
"configVersion":"v1",
7+
"kubernetes":[{
8+
"apiVersion": "wyrihaximus.net/v1",
9+
"kind": "RedisDatabase",
10+
"executeHookOnEvent":["Added"]
11+
}]
12+
}
13+
EOF
14+
else
15+
type=$(jq -r '.[0].type' ${BINDING_CONTEXT_PATH})
16+
echo "Event: ${type}"
17+
if [[ $type == "Synchronization" ]] ; then
18+
/engine/init-global-database.sh
19+
count=$(jq -c '.[0].objects | .[] | .object' ${BINDING_CONTEXT_PATH} | wc -l)
20+
if [[ "$count" != "0" ]] ; then
21+
echo "Synchronizing existing redis databases"
22+
jq -c '.[0].objects | .[] | .object' ${BINDING_CONTEXT_PATH} | tr '\n' '\0' | xargs -0 /engine/add.sh
23+
fi
24+
fi
25+
fi

0 commit comments

Comments
 (0)