RundeckのDBデータを全削除する
目的
Rundeckでジョブを作って回していたところ、crontabの設定を失敗してしまい、大量のActivityログが溜まってしまいました(20万件程)。Projectごと削除しようとしましたが、なぜか、Deleteを押しても応答がなく、消せない状態に。おそらくActivityのレコード数が多すぎるためだと思いますが・・・
bulk deleteやapiなどでActivityログを削除する方法もあるようですが、定義しているjobの数も少ないのでいっそのことRundeckのDB(MySQL)ごと洗い替えしましたので、その手順を記載します。
環境
OS : CentOS7
MySQL:Ver. 15.1
Rundeck:Ver. 3.0.13
Step1 : ジョブのバックアップを取る
DBを再構築するとジョブ定義が飛んでしまいますので、あらかじめ必要なジョブ定義をエクスポートしておきます。手順は簡単でジョブの画面で「ジョブのアクション」をクリックし、リストから「XML形式でジョブ定義をダウンロード」を選択します。このXMLのジョブ定義ファイルはクライアント端末等に保存しておけば大丈夫です。
Step2 : DBを再作成する
思い切ってMySQLのrundeck用のdatabaseを削除します。今回はrundeckという名前のDBを作成していましたので、以下のように一旦dropしてから再度作成します。またrundeck用のユーザも作成していましたので、こちらも一応作り直しました。
#既存データベース/ユーザ削除
$ DROP DATABASE rundeck;
$ DROP USER rundeckuser@localhost;
#再作成
$ CREATE DATABASE rundeck;
$ GRANT ALL ON rundeck.* to 'rundeckuser'@'localhost' identified by 'rundeckpassword';
この時、データベース名やパスワードは以前使用していたものと同様にしておくのが良いです。もし、以前から変更する場合はrundeck-config.propertiesの書き換えを行う必要があります。
Step3 : Rundeck再起動
rundeckを再起動します。
$ systemctl restart rundeckd
Step4 : ジョブのインポート
これで再度ブラウザからrundeckへアクセスするとログイン画面が現れます。この時、IDやパスワードなどは消えていませんので、以前から使用していたアカウント情報でログインできます。
また、プロジェクトも以前に定義していたものが残っているはずです。ただし、ジョブについてはDBで定義されていたようで、すべて消えています。Activityも同様にクリーンアップされています。
ということで、先ほどXMLで吐き出しておいたジョブ定義をインポートします。インポート先のプロジェクトで、ジョブの画面を開き、「ジョブのアクション」から「定義をアップロード」を選択します。
そして、Select a ジョブs definition file.のしたのファイルの選択から、クライアント端末などに保存したファイルのパスを選択します。その下のファイル形式選択ではXMLを選んでおきます。(デフォルトでXMLになっているはず)
あとはUploadを押せば完了です。
まとめ
Rudeckのデータを一掃したい場合、ユーザ定義やプロジェクト定義などを残したままジョブやアクティビティログなどを消せるというのは、割と便利かもと思いました。ただ、データベース定義をドロップするという荒業感はありますので、注意しながら実施してください。