Rundeck job をエクスポートする


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名がわからなくなるのがいけませんが、
ドキュメントがなかったりするので、こんな感じで…
以上です。

コメント