Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

shellcheck #3

Open
davem-git opened this issue May 14, 2021 · 0 comments
Open

shellcheck #3

davem-git opened this issue May 14, 2021 · 0 comments

Comments

@davem-git
Copy link

shell check made a lot of suggestions on the shell script. I wanted to create a PR to suggest the changes, however it doesn't look like i have permission to.

here's the changes

#!/bin/bash

DEFAULT_TTL=${DEFAULT_TTL:-1 day}  # delete Jobs finished before this time (if TTL not provided for the Job) -- empty string means never delete by default
DEFAULT_TTL_FAILED=${DEFAULT_TTL_FAILED:-5 days}  # same as above but for unfinished Jobs (DEFAULT_TTL *must* be set for this to take effect) -- empty string means never delete failed Jobs by default
NS_BLACKLIST=("${NS_BLACKLIST:-kube-system}")  # do NOT delete Jobs from these namespaces (space delimited list)


function get_exp_date {
  local offset=$1
  date -u -d "-$offset" "+%FT%H:%M:%SZ"
}

echo "starting reaper with:"
echo "  DEFAULT_TTL: $DEFAULT_TTL"
echo "  DEFAULT_TTL_FAILED: $DEFAULT_TTL_FAILED"
echo "  NS_BLACKLIST: ${NS_BLACKLIST[*]}"

[ "$DEFAULT_TTL_FAILED" != "" ] && [ "$DEFAULT_TTL" == "" ] && echo "FATAL: DEFAULT_TTL_FAILED can only be set if DEFAULT_TTL is also set" && exit 1

# get Jobs that do not have any parent resources (e.g. ignore those managed by CronJobs)
IFS=$'\n'
for j in $(kubectl get jobs --all-namespaces -o json | jq -r ".items[] | select( .metadata | has(\"ownerReferences\") | not) | [.metadata.name,.metadata.namespace,.metadata.creationTimestamp,.status.completionTime,.metadata.annotations.ttl,.status.active,.status.succeeded] | @csv" |  sed 's/"//g'); do
  job=$(echo "$j" | cut -d ',' -f 1)
  ns=$(echo "$j" | cut -d ',' -f 2)
  begin=$(echo "$j" | cut -d ',' -f 3)
  fin=$(echo "$J"| cut -d ',' -f 4)
  ttl=$(echo "$j" | cut -d ',' -f 5)
  active=$(echo "$j" | cut -d ',' -f 6)
  succeeded=$(echo "$j" | cut -d ',' -f 7)

  active=${active:-0}
  succeeded=${succeeded:-0}

  delete=0
  blacklisted=0
  #echo "$job: $fin"
  for n in "${NS_BLACKLIST[@]}"; do  # check if in a blacklisted namespace
    [ "$n" == "$ns" ] && blacklisted=1
  done
  if [ $blacklisted -eq 0 ]; then
      if [ "$ttl" != "" ] ; then  # check if TTL annotation on Job
        if [ "$active" -eq 0 ] ; then
            if [ "$succeeded" -eq 1 ]; then
              exp_date=$(get_exp_date "$ttl")
              [[ "$fin" < "$exp_date" ]] && echo "Finished job $ns/$job expired (at $exp_date) due to TTL(\"$ttl\") annotation, deleting" && delete=1
            else
              exp_date=$(get_exp_date "$DEFAULT_TTL_FAILED")
              [[ "$begin" < "$exp_date" ]] && echo "Unfinished job $ns/$job expired (at $exp_date) due to default failed TTL (\"$DEFAULT_TTL_FAILED\"), deleting" && delete=1
            fi
        fi
      elif [ "$DEFAULT_TTL" != "" ]; then  # otherwise check if global TTL set
        if [ "$active" -eq 0 ] ; then
            if [ "$succeeded" -eq 1 ]; then
              exp_date=$(get_exp_date "$DEFAULT_TTL")
              [[ "$fin" < "$exp_date" ]] && echo "Finished job $ns/$job expired (at $exp_date) due to global TTL($DEFAULT_TTL), deleting" && delete=1
            else
              exp_date=$(get_exp_date "$DEFAULT_TTL_FAILED")
              [[ "$begin" < "$exp_date" ]] && echo "Unfinished job $ns/$job expired (at $exp_date) due to default failed TTL($DEFAULT_TTL_FAILED), deleting" && delete=1
            fi
        fi
      fi
      [ $delete -eq 1 ] && kubectl delete job -n "$ns" "$job"
  fi
done

echo "reaper finished"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant