ループ処理で行う内容自体が、もし通常のコマンドで完結するならば
単一job内で、csv読み込み~ループ処理までの処理を記述するのが
一番楽そうではあります。
(シェルジョブに直接処理を記述、またはシェルジョブからスクリプトを実行)
もしWorkflowの定義の処理が必要という場合、
Workflowの機能だけでループを実装する方法は思い浮かばないですが、、、
Web API 利用ならば、実現可能です。
(csvファイルを読み込み、各レコード毎に、orderを投げる処理を書く)
JS7® JobScheduler Web API 利用サンプル
https://qiita.com/saitamanokusa/items/fde0cb4d924fed5916eeシェルスクリプトならば、例えば下記のように書けます。
(ip_address, host_name の2つのorder変数を指定)
------------------------------------------
#order追加
json=$(
cat <<EOS
{
"controllerId": "$js7_controller_id",
"orders": [
{
"workflowPath": "/test/check_variables",
"arguments": {
"ip_address": 192.168.11.1,
"host_name": "web-001"
}
}
]
}
EOS
)
res=$(curl -k -s -X POST \
-H "X-Access-Token: $js7_access_token" \
-H "Content-Type: application/json" \
-d "$json" "$js7_api_url/orders/add")
#order結果確認
js7_order_id=$(echo "$res" | jq -r '.orderIds[]'
json=$(
cat <<EOS
{
"controllerId": "$js7_controller_id",
"orderId": "$js7_order_id"
}
EOS
)
res=$(curl -k -s -X POST \
-H "X-Access-Token: $js7_access_token" -H "Content-Type: application/json" \
-d "$json" "$js7_api_url/orders/history")
echo "$res" | jq .
------------------------------------------
あとは、処理が一度に流れないよう工夫すればよさそうです。
・orderの完了を待って次のOrderを投げるように、処理を調整
・スクリプト中に、適当な時間のsleepを入れる
・Lock機能を使って重複処理を防止
2023年3月9日木曜日 8:53:55 UTC+9 ももなな: