Rundeckのjobはyamlや、xml形式で、export、importができます。
定期的にbackupはとるようにしていたのですが、guiからやるのが辛いので、
rd-jobsコマンドで、cuiからやってみました。
プロジェクト単位で一括で、export、job名指定でのexportができるのですが、
job単位でexportするのに、job名がわからなくていちいち指定するのが面倒くさいため、
jobのリスト出力を元にjob単位でymlを出力するコマンドを実行するスクリプトを
作成するスクリプトを作ってみました。
0.参考サイト
1.project の job一覧を出力する
${TOOLS_BIN},${PROJECT_NAME} は自分の環境で読み替えてください。
私の環境だと、rd-jobs はPATHに通ってないので、フルパスで指定しています。
RUNDECK 2.6.2 だと、
${RUNDECK_HOME}/tools/bin配下に、rd-jobsがあります。
-
コマンド
${TOOLS_BIN}/rd-jobs -p ${PROJECT_NAME}
-
Output
# Found 14 jobs: - 'Job Flow/Collect Artist Infomation - ''#概要 WebサービスからArtist情報を収集する ''' - 'Job Flow/Collect Genre Infomation ' - 'Job Flow/Relate EchonestArtists To FestivalArtistTags - ''# 概要 ArtistのTag名(Fesでの呼び名)とEchonestのArtist情報を紐付けする ''' - RDB Task/relateEArtistToFATag - 'ArtistTagとEchonest Aritstデータを紐付けする' - RDB TaskManage/storeEArtistTaskManage - 'Echonest Artist の関連Task管理テーブルデータを登録する' - 'RDB Task/storeEchonestArtist - ''Artist名を元にEchonest APIで検索し、結果をEchonest Tableに設定する ''' - Mongo Task/storeEchonestArtistImage - 'EchonestのArtistの画像情報をMongoDBに設定する' - Mongo Task/storeEchonestArtistProfile - ' Store Echonest Artist Profile data to Mongo' - RDB Task/storeEchonestGenre - 'Store data to EchonestGenre table' - Mongo Task/storeEchonestSong - 'Echonest Songデータをmongoに登録する' - RDB TaskManage/storeFATagTaskManage - 'FestivalArtistTagの関連Task管理テーブルデータを登録する' - Mongo Task/storeMixCloudArtist - 'store mix cloud artist' - 'RDB Task/storeSerachArtistQuery - ''Artist検索クエリを登録する ''' - 'Mongo Task/storeSoundCloudTrack - ''Echonest Artist の名称を元にSoundCloud API で検索 結果をMongoに登録する '''
2.上記コマンドで取得できる出力から、job名だけ抜きだす。
grep、cut、sed を使ってjob名だけにしてみます。
-
コマンド
${TOOLS_BIN}/rd-jobs -p ${PROJECT_NAME} | grep - | cut -d- -f 2 | cut -d/ -f 2 | sed -e "s/'//g"
-
Output
Collect Artist Infomation Collect Genre Infomation Relate EchonestArtists To FestivalArtistTags relateEArtistToFATag storeEArtistTaskManage storeEchonestArtist storeEchonestArtistImage storeEchonestArtistProfile storeEchonestGenre storeEchonestSong storeFATagTaskManage storeMixCloudArtist storeSerachArtistQuery storeSoundCloudTrack
3.project、job名を指定して、job定義をyamlファイルをexportする。
-
コマンド
${TOOLS_BIN}/rd-jobs -p ${PROJECT_NAME} -n "storeSoundCloudTrack" -F yaml -f storeSoundCloudTrack.yml
-
Output
# Found 1 jobs: - 'Mongo Task/storeSoundCloudTrack - ''Echonest Artist の名称を元にSoundCloud API で検索 結果をMongoに登録する '''
4.Job単位にyamlファイルを作りたいので、以下script化
- script
“YOUR_PROJECT_NAME”、”YOUR_RUNDECK_HOME”は自分の環境で、
読み替えてください。
#!/bin/sh
# ENV
PROJECT_NAME="YOUR_PROJECT_NAME"
RUNDECK_HOME="YOUR_RUNDECK_HOME"
# tools bin dir
TOOLS_BIN="${RUNDECK_HOME}/tools/bin"
# export script name
SCRIPT_NAME="job_export.sh"
rm ./${SCRIPT_NAME}
echo "#!/bin/sh" >> ./${SCRIPT_NAME}
echo "-------------------------------------------------------------"
echo "start make job export script"
echo "-----------------------------"
# OutPut Jobs List
${TOOLS_BIN}/rd-jobs -p ${PROJECT_NAME} | grep - | cut -d- -f 2 | cut -d/ -f 2 | sed -e "s/'//g" | \
while read -r line; do
NAME4YML=`echo ${line} | sed -e 's/ /_/g'`
echo ${TOOLS_BIN}/rd-jobs -p ${PROJECT_NAME} -n '"'${line}'"' -F yaml -f ${NAME4YML}.yml >> ./${SCRIPT_NAME}
done
# 権限を変更する
chmod 700 ./${SCRIPT_NAME}
echo "-------------------------------------------------------------"
echo "end make job export script"
echo "-----------------------------"
-
コマンド
./make_export_job_cmd.sh
-
Output
------------------------------------------------------------- start make job export script ----------------------------- ------------------------------------------------------------- end make job export script -----------------------------
job_export.shが出力されるので、出力されたスクリプトを実行します。
-
コマンド
./job_export.sh
-
Output
monotalk$ ls -1 *.yml
Collect_Artist_Infomation.yml
Collect_Genre_Infomation.yml
Relate_EchonestArtists_To_FestivalArtistTags.yml
relateEArtistToFATag.yml
storeEArtistTaskManage.yml
storeEchonestArtist.yml
storeEchonestArtistImage.yml
storeEchonestArtistProfile.yml
storeEchonestGenre.yml
storeEchonestSong.yml
storeFATagTaskManage.yml
storeMixCloudArtist.yml
storeSerachArtistQuery.yml
storeSoundCloudTrack.yml
実は標準オプションでうまくできるのかもしれませんが、
見つけられなかったです。
そもそもjob名がわからなくなるのがいけませんが、
ドキュメントがなかったりするので、こんな感じで…
以上です。
コメント