※2019/05/30 更新
ETLツール Talendを用いてジョブ実行基盤を運用しているが、 WebのGUIを用いたジョブ登録がめちゃくちゃリスキー。
Nexusを用いれば解放されるらしいが、もろもろの制約で導入できずにいる。
幸いにも、Talend v7.1.1 の時点ではMetaServletAPIがまともに改善していたため、 こちらを使ってコマンドラインベースのリリースシェルを作成した。
新規追加
/opt/TalendTools-7.1.1/tac/apache-tomcat/webapps/org.talend.administrator/WEB-INF/classes/MetaServletCaller.sh -url http://localhost:8080/org.talend.administrator -json '{ "actionName": "associatePreGeneratedJob", "active": true, "authPass": "password", "authUser": "user@company.com", "contextName": "Default", "executionServerName": "sever1", "filePath": "/tmp/SAMPLE_JOB.zip", "importType": "File", "logLevel": "Info", "onUnknownStateJob": "WAIT", "pauseOnError": false, "taskName": "SAMPLE_JOB", "taskType": "Normal", "description": "サンプルジョブ" }'
更新シェル
※コマンドラインツール jq が必要です。
#!/bin/sh JOBNAME=$1 ZIPFILE=$2 CONTEXT=$3 if [ "$JOBNAME" = "" -o "$ZIPFILE" = "" ]; then echo [USAGE] echo $0 \<JOBNAME\> \<ZIPFILE\> exit 1 fi if [ "$CONTEXT" = "" ]; then CONTEXT = {} fi METASERVLETAPI=/opt/TalendTools-7.1.1/tac/apache-tomcat/webapps/org.talend.administrator/WEB-INF/classes/MetaServletCaller.sh TACURL=http://localhost:8080/org.talend.administrator TACUSER=user@company.com TACPASS=password # find JSON=`${METASERVLETAPI} -url ${TACURL} -json "{ \"actionName\": "getTaskIdByName", \"authPass\": \"${TACPASS}\", \"authUser\": \"${TACUSER}\", \"taskName\": \"${JOBNAME}\" }"` TASK_ID=`echo $JSON | jq -r '.taskId'` if [ "$TASK_ID" = "null" ]; then echo ジョブ $JOBNAME はTACに登録されていません。 exit 2 fi JSON=`${METASERVLETAPI} -url ${TACURL} -json "{ \"actionName\": "listTasks", \"authPass\": \"${TACPASS}\", \"authUser\": \"${TACUSER}\" }"` JSON=`echo $JSON| jq ".result[] | select(.id == \"${TASK_ID}\")"` printf "\n" echo "[TAC登録情報]" echo " taskId : "`echo $JSON | jq .id` echo " project : "`echo $JSON | jq .projectName` echo " label : "`echo $JSON | jq .label` echo " server : "`echo $JSON | jq .virtualServerLabel` echo " description : "`echo $JSON | jq .description` printf "\n" echo " 更新ファイル: [${ZIPFILE}]" echo " コンテキスト: ${CONTEXT}" printf "\n" printf "\n" read -p "【確認】このジョブを対象のzipファイルで更新しますか?[y/N]" yn if [ "$yn" != "y" ]; then exit 3 fi JSON=`${METASERVLETAPI} -url ${TACURL} -json "{ \"actionName\": \"updateTask\", \"authPass\": \"${TACPASS}\", \"authUser\": \"${TACUSER}\", \"taskId\": ${TASK_ID}, \"filePath\": \"${ZIPFILE}\", \"context\":${CONTEXT} }"` echo result: ${JSON}
利用例
$ ./updatejob.sh SAMPLE_JOB /tmp/SAMPLE_JOB_0.1.zip '{"PROP1" : "val"}' [TAC登録情報] taskId : "31" project : "PROJECT" label : "SAMPLE_JOB " server : "server1" description : null 更新ファイル: [/tmp/SAMPLE_JOB_0.1.zip] コンテキスト: {"PROP1" : "val"} 【確認】このジョブを対象のzipファイルで更新しますか?[y/N]y result: {"executionTime":{"millis":3417,"seconds":3},"returnCode":0}