From 411862b8baddaac29feb534a9c2975a7c872d80b Mon Sep 17 00:00:00 2001 From: Olaf Bohlen <olbohlen@eenfach.de> Date: Mon, 02 Jan 2023 12:58:57 +0100 Subject: [PATCH] fixed various quoting issues and some bugs related to write code while half asleep --- receipt-processor.ksh | 53 +++++++++++++++++++++++++++-------------------------- 1 files changed, 27 insertions(+), 26 deletions(-) diff --git a/receipt-processor.ksh b/receipt-processor.ksh index 2f7be4d..0179d0d 100644 --- a/receipt-processor.ksh +++ b/receipt-processor.ksh @@ -13,13 +13,15 @@ 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 + # we will later store here modified receipt uids, so we clear it for every run + updatedreceipts="" + # 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') + respjson=$(eval 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) @@ -29,7 +31,7 @@ fi # how many receipts are there? - numreceipts=$(echo "${respjson}" | jq .items[].metadata.name | wc -l) + numreceipts=$(echo "${respjson}" | jq .items\[\].metadata.name | wc -l) # populate the in memory arrays with json metadata, we need # - the name @@ -38,54 +40,53 @@ # 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) + receiptuid=$(echo "${respjson}" | jq -r .items[${i}].metadata.uid) + receiptname[${receiptuid}]=$(echo "${respjson}" | jq -r .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) + newversion=$(echo "${respjson}" | jq -r .items[${i}].metadata.resourceVersion) if [ "x${newversion}" != "x${receiptversion[${receiptuid}]}" ]; then # we have an update! - updatedreceipts="${updatedreceipts} ${newversion}" - receiptsversion[${receiptuid}]="${newversion}" + updatedreceipts="${updatedreceipts} ${receiptuid}" + receiptversion[${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=$(eval 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 ) + scale_b=$( echo "${receipt}" | jq -r .spec.sanescale ) if [ "x${sanescale}" == "xfalse" ]; then scale=Fahrenheit fi - temperature=$( echo ${receipt} | jq .spec.temperature ) + temperature=$( echo ${receipt} | jq -r .spec.temperature ) - preheat_b=$( echo "${receipt}" | jq .spec.preheat ) + preheat_b=$( echo "${receipt}" | jq -r .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) + 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 ) + in_name=$( echo "${receipt}" | jq -r .spec.ingredients[${i}].name ) + in_amount=$( echo "${receipt}" | jq -r .spec.ingredients[${i}].amount ) + in_unit=$( echo "${receipt}" | jq -r .spec.ingredients[${i}].unit ) + in_remarks=$( echo "${receipt}" | jq -r .spec.ingredients[${i}].remarks ) - printf "Fetching %s%s of %s" ${in_amount} ${in_unit} ${in_name} + printf "Fetching %s%s of %s" "${in_amount}" "${in_unit}" "${in_name}" if [ "x${in_remarks}" != "xnull" ]; then - printf " (%s)" ${in_remarks} + printf " (%s)" "${in_remarks}" fi printf "\n" sleep 1 @@ -98,14 +99,14 @@ # 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) + num_steps=$(echo "${receipt}" | jq .spec.steps\[\].order | wc -l) # now let's iterate over that - i=0 + i=1 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}" + instruction=$( echo "${receipt}" | jq '.spec.steps[] | select(.order == '${i}') | { instruction | join (" ")' ) + + printf "Step %i/%i: %s..." ${i} ${num_steps} "${instruction}" sleep $(( ${RANDOM} % 6 + 1 )) printf "done\n" sleep 1 -- Gitblit v1.9.3