initial bundle

This commit is contained in:
Olaf Bohlen
2023-01-01 21:42:31 +01:00
commit d99f23906b
7 changed files with 399 additions and 0 deletions

116
receipt-processor.ksh Normal file
View File

@@ -0,0 +1,116 @@
#!/usr/bin/ksh
# by Olaf Bohlen <olbohlen@eenfach.de>
# licensed under BSD3 license
APIURL="https://${KUBERNETES_SERVICE_HOST}:${KUBERNETES_SERVICE_PORT_HTTPS}"
NAMESPACE=$(</run/secrets/kubernetes.io/serviceaccount/namespace)
TOKEN=$(</run/secrets/kubernetes.io/serviceaccount/token)
CACRT="/run/secrets/kubernetes.io/serviceaccount/ca.crt"
# some associate arrays we need
typeset -A receiptname
typeset -A receiptversion
CURLOPTS='-s --cacert ${CACRT} -H "Accept: application/json" -H "User-Agent: ksh93 receipt processor 0.1" -H "Authorization: Bearer ${TOKEN}"'
updatedreceipts=""
while sleep 5; do
# MAIN loop
# get a CookieReceiptList item from the API and store the json in a variable
respjson=$(curl -XGET ${CURLOPTS} '${APIURL}/apis/de.eenfach.olbohlen/v1/namespaces/${NAMESPACE}/cookiereceipts?limit=500')
# check if we got the expected resource:
kind=$(echo "${respjson}" | jq .kind)
if [ x${kind} != 'x"CookieReceiptList"' ]; then
printf "Error: unexpected Result from API\n"
break ## jump out of this loop iteration
fi
# how many receipts are there?
numreceipts=$(echo "${respjson}" | jq .items[].metadata.name | wc -l)
# populate the in memory arrays with json metadata, we need
# - the name
# - the uid
# - the resourceVersion
# for every receipt to figure out if we need to process them
i=0
while [ ${i} -lt ${numreceipts} ]; do
##foo[${xid}]=$(echo "${RESPJSON}" | jq .items[1].metadata.name)
receiptuid=$(echo "${respjson}" | jq .items[${i}].metadata.uid)
receiptname[${receiptuid}]=$(echo "${respjson}" | jq .items[${i}].metadata.name)
#receiptversion[${receiptuid}]=$(echo "${respjson}" | jq .items[${i}].metadata.resourceVersion)
# check if we already have processed this version of the receipt, if not
# store the uid of that receipt in the updatedreceipts var
newversion=$(echo "${respjson}" | jq .items[${i}].metadata.resourceVersion)
if [ "x${newversion}" != "x${receiptversion[${receiptuid}]}" ]; then
# we have an update!
updatedreceipts="${updatedreceipts} ${newversion}"
receiptsversion[${receiptuid}]="${newversion}"
fi
i=$(( ${i} + 1 ))
done
# now that we have a list of updated receipts, we are going to process them
for r in ${updatedreceipts}; do
# get the name for the UID and fetch only that object
receipt=$( curl -XGET ${CURLOPTS} '${APIURL}/apis/de.eenfach.olbohlen/v1/namespaces/${NAMESPACE}/cookiereceipts/${receiptname[${r}]}' )
# receipt contains now the json for one receipt, now we parse that
# we set scale to Fahrenheit if sanescale is false, else scale will use Celsius
scale_b=$( echo "${receipt}" | jq .spec.sanescale )
if [ "x${sanescale}" == "xfalse" ]; then
scale=Fahrenheit
fi
temperature=$( echo ${receipt} | jq .spec.temperature )
preheat_b=$( echo "${receipt}" | jq .spec.preheat )
if [ "x${preheat_b}" == "xtrue" ]; then
printf "Pre: we heat up the oven to %s degrees %s\n" "${temperature}" "${scale:-Celsius}"
fi
# how many ingredients do we have?
num_in=$(echo "${receipt}" | jq .spec.ingredients[].name | wc -l)
# list up that we fetch needed ingredients
i=0
while [ ${i} -lt ${num_in} ]; do
in_name=$( echo "${receipt}" | jq .spec.ingredients[${i}].name )
in_amount=$( echo "${receipt}" | jq .spec.ingredients[${i}].amount )
in_unit=$( echo "${receipt}" | jq .spec.ingredients[${i}].unit )
in_remarks=$( echo "${receipt}" | jq .spec.ingredients[${i}].remarks )
printf "Fetching %s%s of %s" ${in_amount} ${in_unit} ${in_name}
if [ "x${in_remarks}" != "xnull" ]; then
printf " (%s)" ${in_remarks}
fi
printf "\n"
sleep 1
i=$(( ${i} + 1 ))
done
# now we need to (unfortunately just!) simulate the processing
# the order of the steps is important, but lists are not ordered, so we have
# an "order" attribute in each list item, and we select on that.
# first again, we need the amount of instructions...
num_steps=$(echo "${receipt}" | jq .spec.steps[].order | wc -l)
# now let's iterate over that
i=0
while [ ${i} -lt ${num_steps} ]; do
instruction=$( echo "${receipt}" | jq ".spec.steps[] | select(.order == ${i}) | { instruction | join (' ')" )
##echo "${receipt}" | jq '.spec.steps[] | select(.order == 5) | { instruction } | join (" ")'
printf "Step %i/%i: %s..." $(( ${i} + 1 )) ${num_steps} "${instruction}"
sleep $(( ${RANDOM} % 6 + 1 ))
printf "done\n"
sleep 1
i=$(( ${i} + 1 ))
done
done
done