From 267308dc0c2acb42d8ffaf871337a70122f54a42 Mon Sep 17 00:00:00 2001 From: Olaf Bohlen <olbohlen@eenfach.de> Date: Wed, 15 Feb 2023 11:46:43 +0100 Subject: [PATCH] fixed language issues...;) --- /dev/null | 126 ------------------------- oaty-hazelnut-cookies.yaml | 2 cookie-operator-deployment.yaml | 8 Containerfile | 6 cookie-rbac.yaml | 12 +- sample-cookie.yaml | 4 cookie-crd.yaml | 12 +- cookieprocessor-sa.yaml | 4 recipe-processor.ksh | 126 +++++++++++++++++++++++++ 9 files changed, 150 insertions(+), 150 deletions(-) diff --git a/Containerfile b/Containerfile index 5eb9715..c0a5c4f 100644 --- a/Containerfile +++ b/Containerfile @@ -1,11 +1,11 @@ FROM docker.eenfach.de/olbohlen/kshbase:latest LABEL author="Olaf Bohlen <olbohlen@eenfach.de>" -COPY receipt-processor.ksh /usr/local/bin/receipt-processor.ksh -RUN chmod 755 /usr/local/bin/receipt-processor.ksh && \ +COPY recipe-processor.ksh /usr/local/bin/recipe-processor.ksh +RUN chmod 755 /usr/local/bin/recipe-processor.ksh && \ useradd cookie && \ dnf install -y jq USER cookie -ENTRYPOINT ["/usr/local/bin/receipt-processor.ksh"] \ No newline at end of file +ENTRYPOINT ["/usr/local/bin/recipe-processor.ksh"] diff --git a/cookie-crd.yaml b/cookie-crd.yaml index 2af44fb..8872577 100644 --- a/cookie-crd.yaml +++ b/cookie-crd.yaml @@ -1,13 +1,13 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - name: cookiereceipts.de.eenfach.olbohlen + name: cookierecipes.de.eenfach.olbohlen spec: group: de.eenfach.olbohlen names: - kind: CookieReceipt - plural: cookiereceipts - singular: cookiereceipt + kind: CookieRecipe + plural: cookierecipes + singular: cookierecipe scope: Namespaced versions: - name: v1 @@ -15,7 +15,7 @@ storage: true schema: openAPIV3Schema: - description: "The CookieReceipt CRD is a k8s demo for enhancing functionality, it will not (unfortunately) provide you real cookies in the end..." + description: "The CookieRecipe CRD is a k8s demo for enhancing functionality, it will not (unfortunately) provide you real cookies in the end..." type: object properties: apiVersion: @@ -40,7 +40,7 @@ type: string description: where does this come from? (grandma, mum, the internet...) ingredients: - description: this list provides required ingredients for this receipt + description: this list provides required ingredients for this recipe type: array x-kubernetes-list-type: atomic items: diff --git a/cookie-operator-deployment.yaml b/cookie-operator-deployment.yaml index 5312f55..ea6916b 100644 --- a/cookie-operator-deployment.yaml +++ b/cookie-operator-deployment.yaml @@ -3,19 +3,19 @@ metadata: creationTimestamp: null labels: - app: receipt-processor - name: receipt-processor + app: recipe-processor + name: recipe-processor spec: replicas: 1 selector: matchLabels: - app: receipt-processor + app: recipe-processor strategy: {} template: metadata: creationTimestamp: null labels: - app: receipt-processor + app: recipe-processor spec: serviceAccountName: cookieprocessor containers: diff --git a/cookie-rbac.yaml b/cookie-rbac.yaml index 4cdbba0..50538ac 100644 --- a/cookie-rbac.yaml +++ b/cookie-rbac.yaml @@ -2,12 +2,12 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - name: cookiereceipt-edit + name: cookierecipe-edit rules: - apiGroups: - de.eenfach.olbohlen resources: - - cookiereceipts + - cookierecipes verbs: - create - get @@ -19,12 +19,12 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - name: cookiereceipt-view + name: cookierecipe-view rules: - apiGroups: - de.eenfach.olbohlen resources: - - cookiereceipts + - cookierecipes verbs: - get - list @@ -32,11 +32,11 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: - name: cookiereceipt-edit + name: cookierecipe-edit roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole - name: cookiereceipt-edit + name: cookierecipe-edit subjects: - apiGroup: rbac.authorization.k8s.io kind: Group diff --git a/cookieprocessor-sa.yaml b/cookieprocessor-sa.yaml index 05066ff..335a087 100644 --- a/cookieprocessor-sa.yaml +++ b/cookieprocessor-sa.yaml @@ -8,11 +8,11 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: - name: cookiereceipt-view + name: cookierecipe-view roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole - name: cookiereceipt-view + name: cookierecipe-view subjects: - kind: ServiceAccount name: cookieprocessor diff --git a/oaty-hazelnut-cookies.yaml b/oaty-hazelnut-cookies.yaml index ef869da..f2633a1 100644 --- a/oaty-hazelnut-cookies.yaml +++ b/oaty-hazelnut-cookies.yaml @@ -1,5 +1,5 @@ apiVersion: de.eenfach.olbohlen/v1 -kind: CookieReceipt +kind: CookieRecipe metadata: name: oaty-hazelnut spec: diff --git a/receipt-processor.ksh b/receipt-processor.ksh deleted file mode 100644 index 57fc264..0000000 --- a/receipt-processor.ksh +++ /dev/null @@ -1,126 +0,0 @@ -#!/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}'" - - -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=$(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) - 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 - receiptuid=$(echo "${respjson}" | jq -r .items[${i}].metadata.uid) - receiptname[${receiptuid}]=$(echo "${respjson}" | jq -r .items[${i}].metadata.name) - - # 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 -r .items[${i}].metadata.resourceVersion) - if [ "x${newversion}" != "x${receiptversion[${receiptuid}]}" ]; then - # we have an update! - 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 - printf "\n\nNew receipt found: %s\n" "${receiptname[${r}]}" - printf "--------------------------------------------------------------------------\n\n" - - # get the name for the UID and fetch only that object - 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 -r .spec.sanescale ) - if [ "x${sanescale}" == "xfalse" ]; then - scale=Fahrenheit - fi - - temperature=$( echo "${receipt}" | jq -r .spec.temperature ) - - 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\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 - printf "Fetching ingredients from receipt:\n" - printf "----------------------------------\n" - i=0 - while [ ${i} -lt ${num_in} ]; do - 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}" - if [ "x${in_remarks}" != "xnull" ]; then - printf " (%s)" "${in_remarks}" - fi - printf "\n\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 - printf "\n\nProcessing the instructions:\n" - printf "----------------------------\n" - i=1 - while [ ${i} -le ${num_steps} ]; do - 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\n" - sleep 1 - i=$(( ${i} + 1 )) - done - printf "\nDone with this receipt." - printf "\n=======================\n\n" - done -done - diff --git a/recipe-processor.ksh b/recipe-processor.ksh new file mode 100644 index 0000000..9f35d48 --- /dev/null +++ b/recipe-processor.ksh @@ -0,0 +1,126 @@ +#!/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 recipename +typeset -A recipeversion + +CURLOPTS="-s --cacert ${CACRT} -H 'Accept: application/json' -H 'User-Agent: ksh93 recipe processor 0.1' -H 'Authorization: Bearer ${TOKEN}'" + + +while sleep 5; do + # MAIN loop + + # we will later store here modified recipe uids, so we clear it for every run + updatedrecipes="" + + # get a CookieRecipeList item from the API and store the json in a variable + respjson=$(eval curl -XGET ${CURLOPTS} "${APIURL}/apis/de.eenfach.olbohlen/v1/namespaces/${NAMESPACE}/cookierecipes?limit=500") + + # check if we got the expected resource: + kind=$(echo "${respjson}" | jq .kind) + if [ x${kind} != 'x"CookieRecipeList"' ]; then + printf "Error: unexpected Result from API\n" + break ## jump out of this loop iteration + fi + + # how many recipes are there? + numrecipes=$(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 recipe to figure out if we need to process them + i=0 + while [ ${i} -lt ${numrecipes} ]; do + recipeuid=$(echo "${respjson}" | jq -r .items[${i}].metadata.uid) + recipename[${recipeuid}]=$(echo "${respjson}" | jq -r .items[${i}].metadata.name) + + # check if we already have processed this version of the recipe, if not + # store the uid of that recipe in the updatedrecipes var + newversion=$(echo "${respjson}" | jq -r .items[${i}].metadata.resourceVersion) + if [ "x${newversion}" != "x${recipeversion[${recipeuid}]}" ]; then + # we have an update! + updatedrecipes="${updatedrecipes} ${recipeuid}" + recipeversion[${recipeuid}]="${newversion}" + fi + i=$(( ${i} + 1 )) + done + + # now that we have a list of updated recipes, we are going to process them + for r in ${updatedrecipes}; do + printf "\n\nNew recipe found: %s\n" "${recipename[${r}]}" + printf "--------------------------------------------------------------------------\n\n" + + # get the name for the UID and fetch only that object + recipe=$(eval curl -XGET ${CURLOPTS} '${APIURL}/apis/de.eenfach.olbohlen/v1/namespaces/${NAMESPACE}/cookierecipes/${recipename[${r}]}' ) + + # recipe contains now the json for one recipe, now we parse that + # we set scale to Fahrenheit if sanescale is false, else scale will use Celsius + scale_b=$( echo "${recipe}" | jq -r .spec.sanescale ) + if [ "x${sanescale}" == "xfalse" ]; then + scale=Fahrenheit + fi + + temperature=$( echo "${recipe}" | jq -r .spec.temperature ) + + preheat_b=$( echo "${recipe}" | jq -r .spec.preheat ) + if [ "x${preheat_b}" == "xtrue" ]; then + printf "Pre: we heat up the oven to %s degrees %s\n\n" "${temperature}" "${scale:-Celsius}" + fi + + # how many ingredients do we have? + num_in=$(echo "${recipe}" | jq .spec.ingredients\[\].name | wc -l) + + # list up that we fetch needed ingredients + printf "Fetching ingredients from recipe:\n" + printf "----------------------------------\n" + i=0 + while [ ${i} -lt ${num_in} ]; do + in_name=$( echo "${recipe}" | jq -r .spec.ingredients[${i}].name ) + in_amount=$( echo "${recipe}" | jq -r .spec.ingredients[${i}].amount ) + in_unit=$( echo "${recipe}" | jq -r .spec.ingredients[${i}].unit ) + in_remarks=$( echo "${recipe}" | jq -r .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\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 "${recipe}" | jq .spec.steps\[\].order | wc -l) + + # now let's iterate over that + printf "\n\nProcessing the instructions:\n" + printf "----------------------------\n" + i=1 + while [ ${i} -le ${num_steps} ]; do + instruction=$( echo "${recipe}" | jq '.spec.steps[] | select(.order == '${i}') | { instruction } | join (" ")' ) + + printf "Step %i/%i: %s..." ${i} ${num_steps} "${instruction}" + sleep $(( ${RANDOM} % 6 + 1 )) + printf "done\n\n" + sleep 1 + i=$(( ${i} + 1 )) + done + printf "\nDone with this recipe." + printf "\n=======================\n\n" + done +done + diff --git a/sample-cookie.yaml b/sample-cookie.yaml index cecf708..f0bae68 100644 --- a/sample-cookie.yaml +++ b/sample-cookie.yaml @@ -1,5 +1,5 @@ apiVersion: de.eenfach.olbohlen/v1 -kind: CookieReceipt +kind: CookieRecipe metadata: name: vintage-chocolate-chip spec: @@ -62,7 +62,7 @@ instruction: Leave on the tray for a couple of mins to set and then lift onto a cooling rack. --- apiVersion: de.eenfach.olbohlen/v1 -kind: CookieReceipt +kind: CookieRecipe metadata: name: double-dipped-shortbread spec: -- Gitblit v1.9.3