1. ホーム
  2. 研究日誌
  3. 【Hinemos】REST APIを使ってコマンドジョブをコードで管理する

STUDY研究日誌

Hinemosをはじめ、
様々な技術のノウハウを発信しています。

【Hinemos】REST APIを使ってコマンドジョブをコードで管理する

投稿日: / 更新日:

■はじめに

今回は、Hinemos ver.7.2 の REST API を使って、コマンドジョブの登録・更新をコードだけで行う方法についてご紹介いたします。

Hinemos では GUI からジョブを設定するのが一般的ですが、同じ構成のジョブを大量に登録したり、コマンドパスを一括で変更したりする場合は、GUI 操作では手間がかかります。
REST API を活用することで、こういった作業をスクリプトで自動化できます。

参考ドキュメント:Hinemos ver.7.2 REST API 開発ガイド(ja_RestAPI_7.2_rev1.html
                                   第18章「ジョブ管理」
※ REST API 開発ガイドはHinemosのサブスクリプション契約が必要なドキュメントです。

それでは、実際に試してみましょう。


1. 環境情報

今回は以下の環境で検証を行いました。

・利用環境:
 Linux版 Hinemosマネージャ、Hinemos Webクライアント(ver.7.2)
 Hinemosエージェントサーバ(ファシリティID: agent

・言語:Python(/usr/libexec/platform-python、RHEL 8)

・対象ジョブユニット:JOBUNIT

・登録するコマンドジョブ:

ジョブID ジョブ名 起動コマンド
CMD_JOB_01 コマンドジョブ01 /opt/scripts/job_01.sh
CMD_JOB_02 コマンドジョブ02 /opt/scripts/job_02.sh
CMD_JOB_03 コマンドジョブ03 /opt/scripts/job_03.sh
CMD_JOB_04 コマンドジョブ04 /opt/scripts/job_04.sh
CMD_JOB_05 コマンドジョブ05 /opt/scripts/job_05.sh

2. 事前準備:GUI でジョブユニットを作成する

REST API でコマンドジョブを登録するには、ジョブユニットがあらかじめ作成済みであることが前提となります。

今回は「ジョブユニットだけ GUI で作成し、その配下のコマンドジョブは API で登録する」という方針で進めます。

Hinemos Webクライアントを起動し、ジョブ設定パースペクティブからジョブユニット JOBUNIT を新規作成・登録してください。
この時点ではコマンドジョブは何も登録しなくて構いません。

空の JOBUNIT が登録された状態のジョブツリー


3. 認証トークンの取得

Hinemos の REST API は Bearer トークン認証を使用します。
(参照:REST API 開発ガイド「2.1 ログイン」)

まず、以下のスクリプトを実行してトークンを取得します。引数には「ログインユーザ名 / ログインパスワード」を指定します。

実行すると ./token_hinemos.txt にトークンが保存されます。以降のスクリプトはこのファイルを読み込んで認証に使用します。

getToken.py のコード(クリックで展開)

4. コマンドジョブの一括登録

REST API 開発ガイドの「18.2 コマンドジョブを追加する」に記載されている
POST /jobunit/{jobunitId}/commandJob エンドポイントを使用します。

このエンドポイントを使うにあたり、Hinemos ではジョブ設定の変更操作の前にロック(編集セッション)の取得が必要です。
処理の流れは以下の通りです。

  1. ジョブツリー取得 API でロック取得に必要な情報を確認する
  2. ロックを取得する
  3. コマンドジョブを 1 件ずつ登録する(今回は 5 件)
  4. ロックを解放する

以下のスクリプトを実行してコマンドジョブを一括登録します。引数にはログインユーザ名を指定します。

registerJobUnit.py のコード(クリックで展開)

スクリプトを実行すると、以下のように出力されます。

● GUI での登録確認

スクリプト実行後、Hinemos Webクライアントのジョブ設定パースペクティブを確認します。
JOBUNIT 配下に 5 件のコマンドジョブが登録されていることが確認できます。

JOBUNIT 配下に CMD_JOB_01〜05 が並んだジョブツリー

登録されたジョブをダブルクリックして開き、起動コマンドが正しく設定されていることも確認します。

登録したCMD_JOB_01 のコマンドタブ


5. 起動コマンドの一括更新

登録済みのコマンドジョブの起動コマンドを変更するには、REST API 開発ガイドの
「18.4 コマンドジョブを変更する」に記載の PUT /jobunit/{jobunitId}/commandJob/{jobId} を使用します。

以下のスクリプトは引数で指定したジョブの起動コマンドを変更します。
引数は「ログインユーザ名 / ジョブユニットID / ジョブID / 新しい起動コマンド」の順です。

updateCommandJob.py のコード(クリックで展開)

5 件まとめてパスを変更する場合は、シェルのループで実行できます。

実行結果:

● GUI での更新確認

スクリプト実行後、GUI でジョブを開き、起動コマンドが更新されていることを確認します。

更新したCMD_JOB_01 のコマンドタブ


6. リクエストボディ作成時のポイント

REST API でコマンドジョブを登録・更新する際、リクエストボディを組み立てる上で確認が必要だったポイントをご紹介します。

● その1:stopTypestopCommand の組み合わせ

REST API 開発ガイド「18.2 コマンドジョブを追加する」の stopType パラメータについて、
EXECUTE_COMMAND(停止コマンド実行)を指定する場合は stopCommand も合わせて設定する必要があります。
停止コマンドを使用しない場合は DESTROY_PROCESS(プロセス終了)を指定してください。

● その2:通知優先度の 4 フィールドは必須

REST API 開発ガイド「18.2 コマンドジョブを追加する」のリクエストボディには、通知優先度として以下の 4 フィールドの指定が必要です。
通知を使用しない場合は "NONE" を設定してください。

● その3:リトライ系フィールドの下限値

リトライ機能を使用しない場合でも、以下のフィールドには 0 ではなく 1 以上の値を設定してください。

フィールド 下限値
commandRetry(繰り返し実行回数) 1
jobRetry(繰り返し実行回数) 1
messageRetryEndValue(エラー時終了値) 1

● その4:出力情報の directory フィールド

ファイル出力を使用しない場合(valid: false)でも、normalJobOutputInfo / errorJobOutputInfodirectory および fileName フィールドには空文字以外の値を設定してください。

● その5:遅延設定フィールドの下限値

開始遅延・終了遅延の機能を使用しない場合でも、以下のフィールドには 0 ではなく 1 以上の値を設定してください。
0 を設定すると、GUI でジョブを開いた際に入力エラーが表示されます。

フィールド 下限値
startDelaySessionValue 1
endDelaySessionValue 1
endDelayJobValue 1

■おわりに

今回は、Hinemos ver.7.2 の REST API を使ってコマンドジョブの登録・更新をコードで行う方法をご紹介しました。

REST API 開発ガイドに記載の各エンドポイントを活用することで、大量のジョブ登録やコマンドパスの一括変更といった作業をスクリプトで自動化できます。
リクエストボディを組み立てる際は、第6章でご紹介したポイントを参考にしていただければ幸いです。

大量のジョブをコードで管理したい場合や、設定を一括変更したい場合にぜひご活用ください!

関連する記事

Hinemos導入はアトミテックにお任せください

見積もりを依頼する

最新情報発信中

Xやメルマガでも、Hinemosの保守、
開発、導入、構築やカスタマイズ等の
お役立ち情報を発信しています。
是非ご登録ください。