OSSのジョブ管理ツール「JobScheduler」が2017年3月にバージョンアップし、v1.11がリリースされています。このv1.11ではWebの管理画面がかなり強化され、これまでのものとは全くの別ものになっています。
これまで、JobSchedulerはユーザ管理の概念・機能がなく、エンタープライズ向けに使うにはかなり工夫しながら検討しないといけなかったです。しかし、v1.11のWeb管理画面のJOC Cockpitでは、ユーザ管理機能がつき、非常に細かい権限管理も可能になりました。
このユーザ認証・権限管理周りの話はまた別途記事にまとめる予定です。
今回は、このJOC Cockpitの機能搭載により、Web APIの仕様が大きく変わってきているのでその使い方をご紹介します。
JobSchedulerのWebAPI
JobSchedulerはこれまでのバージョンでも外部のツール等からJobScheduler上のジョブ実行等の処理を行うためのWebAPIが提供されていました。
参考: https://www.slideshare.net/ikedai/job-scheduleroperations-as-code
このWebAPIが、JOC Cockpitが提供され、ユーザ管理の機能が備わったことで使い方が変わりました。
JOC CockpitのREST WebAPIの実行
使い方についてはこちらのページに詳しくまとまっています。
これまではいきなりコマンド実行を投げかけるだけという感じだったところ、まずはログイン処理から始まり、トークンを使って各処理を実行するように変わっています。
① ログイン処理
まずはログイン処理です。
API実行できるユーザの情報を使ってログイン処理を行います。
ポイントは、POSTリクエスト時のAuthorizationヘッダーです。
このヘッダーに、以下の形式のテキスト情報をBASE64エンコードした文字列を引き渡すことでログイン処理が完了します。
ユーザ名:パスワード
例えば、rootユーザで、パスワードがpasswordの場合、「cm9vdDpwYXNzd29yZA==」こんな感じです。
これを用いてLinuxのcurlコマンドで処理実行するには以下のように行います。
$ curl -X POST -H "Authorization: Basic cm9vdDpwYXNzd29yZA==" -H "Content-Type: application/json" -H "Cache-Control: no-cache" http://jochostname:4446/joc/api/security/login
JOC Cockpitはデフォルトで4446ポートで待ち受けており、ログイン用のAPIのURLは/joc/api/security/loginとなります。
これを実行すると、以下のようなレスポンスが返ってきます。
{"enableTouch":true,"sessionTimeout":900000,"user":"root","accessToken":"0c61969a-45f8-41b1-9688-7d90d43ba3cc","hasRole":false,"isAuthenticated":true,"isPermitted":false}
accessTokenの部分が以降の処理に必要なトークンです。
② WebAPIを使ったジョブの実行命令
ログインを済ませ、トークンが発行されたら、次は実際にAPIでジョブ実行処理を行ってみます。
job1という名前のジョブを実行したい場合には、POSTリクエストのbodyに以下のようなxmlデータを持たせて実行します。
<jobscheduler_commands jobschedulerId='scheduler'>
<start_job job="sample/job1" at="now" />
</jobscheduler_commands>
こちらも同じくcurlコマンドで実行してみます。
$ curl -X POST -H "access_token: 0c61969a-45f8-41b1-9688-7d90d43ba3cc" -H "Content-Type: application/xml" -H "Cache-Control: no-cache" http://jochostname:4446/joc/api/jobscheduler/commands -d '<jobscheduler_commands jobschedulerId="scheduler"><start_job job="sample/job1" at="now" /></jobscheduler_commands>`
この実行の結果、処理結果のXMLが返ってくればOKです。
以下のような応答が来た場合にはアクセストークンが誤っているか、access_tokenのヘッダーの書き方が間違っているかなので今一度コマンド内容確認してみてください。
{"enableTouch":true,"message":"SessionNotExistException: Session doesn't exist","hasRole":false,"isAuthenticated":false,"isPermitted":false}
JobSchedulerのAPI実行用golangライブラリを作って公開していたりしますが、こちらはまだCockpit対応はできていないのでご注意を。どこかのタイミングで対応しようと思います。