Skip to content

Instantly share code, notes, and snippets.

@shamil
Last active March 24, 2023 20:02
Show Gist options
  • Star 26 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save shamil/1f6524f06210252c7d13d0deb169bdc2 to your computer and use it in GitHub Desktop.
Save shamil/1f6524f06210252c7d13d0deb169bdc2 to your computer and use it in GitHub Desktop.
Rundeck executions cleanup
#!/bin/bash -e
# see related issue: https://github.com/rundeck/rundeck/issues/357
# export required vars
export RD_URL=http://localhost:4440 RD_USER=admin RD_PASSWORD=admin RD_HTTP_TIMEOUT=300
# make sure rd & jq commands are in the PATH
which -- rd jq >/dev/null
del_executions() {
local project=$1
while true; do
rd executions deletebulk -R -y -m ${RD_OPTION_BATCH:-20} --older ${RD_OPTION_OLDER_THAN:-3d} -p $project || break
sleep 1s
done
}
# delete executions for each project
for p in $(RD_FORMAT=json rd projects list | jq -r .[]); do
del_executions $p
done
exit 0
@devinnasar
Copy link

Hello,

The ''|| break" mechanic on line 14 isn't working for me. It seems that the script doesn't detect when there are no further executions to delete and it just loops forever on a given project. Any advice? I ended up doing this:

_delete_project_executions(){
  local _project="${1}"
  local _batch_size="${2}"
  local _max_age="${3}"

  printf "Deleting executions from project: \"${_project}\" older than: \"${_max_age}\" in batches of ${_batch_size}...\n"

  # Delete executions in $_project in batches of $_batch_size older than $_max_age.
  _executions_detected=true

  while [[ "${_executions_detected}" == true ]]; do

    exec {_stdout_copy}>&1 # make the FD named in "$stdout_copy" a copy of FD 1
    _executions_deleted=$(RD_FORMAT=json rd executions deletebulk --confirm --project "${_project}" --max "${_batch_size}" --older "${_max_age}" | tee /dev/fd/"${_stdout_copy}") # JSON format ensures either executions will be deleted or there will be no output.
    exec {_stdout_copy}>&- # close that copy previously created

    _executions_deleted_count=$(echo "${_executions_deleted}" | wc -l)
    printf "Executions deleted: ${_executions_deleted_count}...\n"

    sleep 1s

    if [[ -z "${_executions_deleted}" ]]; then
      _executions_detected=false
    fi

  done
}

@erik-stephens
Copy link

@devinnasar, try -R:

[--require -R] : Treat 0 query results as failure, otherwise succeed if no executions were returned

@barkingfoodog
Copy link

Very helpful script, thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment