Rundeck の実行ログを削除する
一部で OSS のジョブ管理ツール Rundeck を使っているのですが、過去の実行結果を残しておく用途が無いのと、ディスクサイズがカツカツなので、 週次で実行ログを削除するジョブを動かしています。
Rundeck の API リファレンス を読めば誰でも出来るんですが、もっと効率がいい方法があれば教えてもらいたいなぁ、と考えているので、うちでのやり方を公開します。
詳細
Token の取得
下記のスクリプトでトークンを取得し「.rundeck_token」というファイルに Token を残します。
トークン取得の API を実行すると xml が返ってくるので、awk と sed を使って、Token だけ抜き出してます。
# !/bin/bash
OLD_TOKEN=~/.rundeck_token
TMP_XML=/tmp/rundeck.xml
RUNDECK_URL="http://xxx.xxx.xxx.xxx/rundeck/api"
RUNDECK_AUTH_TOKEN="X-Rundeck-Auth-Token"
if [ -e ${OLD_TOKEN} ]; then
GET_TOKEN=`cat ${OLD_TOKEN}`
else
GET_TOKEN=$RD_OPTION_DEF_TOKEN
fi
echo "current token: ${GET_TOKEN}"
echo "get new token"
curl -s -X POST -H "${RUNDECK_AUTH_TOKEN}:${GET_TOKEN}" -H 'Content-Type:application/json' -d "{"user":"hoge", "roles":"*","duration":"30d"}" ${RUNDECK_URL}/11/tokens -o ${TMP_XML}
NEW_TOKEN=`xmllint --xpath "token" ${TMP_XML} |awk '{print substr($0, index($0, "id="))}' |sed -e 's/id="//g' |sed -e 's/"\/>//g'`
echo "new token: ${NEW_TOKEN}"
rm -rf ${TMP_XML}
if [ -e ${OLD_TOKEN} ]; then
echo "delete current token"
curl -s -X DELETE -H "${RUNDECK_AUTH_TOKEN}:${NEW_TOKEN}" ${RUNDECK_URL}/11/token/${GET_TOKEN}
fi
echo ${NEW_TOKEN} > ${OLD_TOKEN}
実行結果削除 API の実行
上記で生成した Token を使って、この API を呼び出しています。
"$RD_OPTION_TGT_UUID" は、↓で説明しますが、削除対象の UUID を受け取っています。
# !/bin/bash
TOKEN_FILE=~/.rundeck_token
RUNDECK_URL="http://xxx.xxx.xxx.xxx/rundeck/api"
RUNDECK_AUTH_TOKEN="X-Rundeck-Auth-Token"
if [ -e ${TOKEN_FILE} ]; then
GET_TOKEN=`cat ${TOKEN_FILE}`
else
GET_TOKEN=$RD_OPTION_DEF_TOKEN
fi
echo "delete uuid ${RD_OPTION_TGT_UUID}"
curl -s -X DELETE -H "${RUNDECK_AUTH_TOKEN}:${GET_TOKEN}" ${RUNDECK_URL}/12/job/${RD_OPTION_TGT_UUID}/executions
UUID の渡し方
上記の削除 API には、対象 Job の UUID が必要となります。
下図のような感じで、削除 API を別 Job にして、UUID を渡してあげるような仕組みにしています。
悩んでいる点
もっといいやり方無いですかね?
特に UUID 周り。Job の増減がある度に、変更が必要になるので面倒。。。
仲間募集中
弊社ではエンジニアを募集中です。インフラからアプリ、ユーザサポートまで幅広く業務を行ってます。
https://www.nittsu-infosys.com/recruit/2019/index.html