JS7®コントローラー／エージェントの自動登録スクリプト

JS7®JobSchedulerは独SOS社(Software- und Organisations-Service GmbH)によって開発されている、オープンソースのジョブ管理システムです。
JS7®では、JOCコックピット／コントローラー／エージェントのインストール後に、JOCコックピットのWEB GUIからコントローラー／エージェントを登録しなければいけませんが、スクリプトを使用してのコントローラー／エージェントの自動登録方法について記載します。

https://kb.sos-berlin.com/display/JS7/JS7+-+Automated+Deployment+On+Premises

詳細な情報については、以下をご覧下さい。

 - ナレッジベース（英語）　https://kb.sos-berlin.com/display/PKB/JS7
 - 日本語紹介資料 https://www.ossl.co.jp/
 - 日本JobSchedulerユーザーグループ https://sites.google.com/site/jobschedulerja/
 - https://groups.google.com/forum/?hl=ja#!forum/jobscheduler-ja
 - https://www.facebook.com/Jobscheduler-Japan-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97-594469610565511/timeline/
 - JIRA（英語）
　https://change.sos-berlin.com/secure/Dashboard.jspa
 - User Forum（英語）　http://sourceforge.net/projects/jobscheduler/forums/forum/486122
 - SOS社ホームページ　http://www.sos-berlin.com

JS7® JobSchedulerの概要及びインストール方法については以下を参照ください
**Dockerでのインストール手順**　https://qiita.com/satoruf/items/360fee5293611433ed33
**Windowsでのインストール手順**　https://qiita.com/Yoshitami/items/6804584592956a483364
**Linux/CLIでのインストール手順**　https://qiita.com/satoruf/items/fa9846f4376d1a50a67e
**Linux/インストールスクリプト手順**　https://qiita.com/Yoshitami/items/c2bf066368b4c5cf486e
**JS7® JobSchedulerクイックスタート**　https://qiita.com/satoruf/items/96f21ef25bcb35e47b21

# １．コントローラー／エージェントの自動登録スクリプトについて

Unix シェル用に提供されているコントローラー デプロイメント スクリプトを適用して、コントローラーとエージェントを自動登録することができます。

本書では、このスクリプトを使用して、スタンドアロン構成のコントローラー/エージェントをJOCに自動登録する手順を記載します。

詳細は以下をご参照ください。

https://kb.sos-berlin.com/display/JS7/JS7+-+Unix+Shell+CLI+for+Controller+Deployment

# ２．JS7インストール環境
本手順は、JS7®の機能確認を目的とした検証環境のスタンドアロン構成構築の手順です。
実業務では使用しないで下さい。

・CentOS 8.5
・JS7 2.7.1
・MariaDB 10.3.28
・openjdk 17.0.2
・SELinuxはDisabled、Firewalldは停止されていること
・スタンドアロン構成
・JOC、Controller、Agent、DBは同居
・パッケージをダウンロードするためインターネットへの接続が可能なこと
・JS7は「scheduler」ユーザにてインストール
※JOC、Controller、Agentはインストール済みであり、JOCにController/Agentは登録を行っていないこと
※curlコマンド、jqコマンドがインストール済みで、JS7インストールユーザが使用可能であること
　（コマンドはスクリプト内で使用されているためインストールが必要、本書でのJS7インストールユーザは「scheduler」とする）

# ３．コントローラー/エージェント自動登録スクリプトのインストール

以下からの作業はインストールユーザのschedulerで作業します。
```shell-session
# su - scheduler
```

作業ディレクトリを作成します。
```shell-session
$ mkdir /home/scheduler/work
```

以下のサイトからスクリプトをダウンロードし、解凍します。

https://kb.sos-berlin.com/display/JS7/JS7+-+Download#JS7Download-unix_shell_cli

・ファイル名：
　　js7.unix_shell_cli.tar.gz
  
・配置先：/home/scheduler/work

```shell-session
$ cd /home/scheduler/work/
$ wget https://download.sos-berlin.com/JobScheduler.2.7/js7.unix_shell_cli.tar.gz
$ tar zxvf js7.unix_shell_cli.tar.gz
```

以下のディレクトリ、ファイルが解凍されます。

ディレクトリ：js7.unix_shell_cli/bin
ファイル：deploy-controller.sh
コントローラー/エージェントの自動登録は上記のスクリプトを使用します。


# ４．コントローラーの自動登録

上記の手順で解凍したスクリプト「deploy-controller.sh」を使用してコントローラーを自動登録します。

### （１）コントローラーの起動確認

自動登録を行うコントローラーのサービスが起動していることを確認します。

```shell-session
$ systemctl status controller.service
```
※サービスがactiveで起動していることを確認する
サービスが起動していない場合は、起動します。

```shell-session
$ sudo systemctl start controller.service
```

### （２）コントローラーの接続確認

JOCからコントローラーに接続できることを確認します。

スクリプトをインストールしたディレクトリに移動し、変数「request_options」にJOCの接続情報を定義します。

```shell-session
$ cd /home/scheduler/work/js7.unix_shell_cli/bin
$ request_options=(--url=http://localhost:4446 --user=root --password=root)
```

※コントローラー/エージェント自動登録スクリプト内でREST APIを使用しているため、JOCのURL/ユーザ名/ユーザパスワードの情報を記載

```shell-session
$ ./deploy-controller.sh check "${request_options[@]}" --controller-url=http:/localhost:4444
```

※上記のコマンド実行し、メッセージが何も出力されないことを確認
　接続に失敗すると以下のようなエラーメッセージが出力される
エラーメッセージサンプル：

```shell-session
[ERROR] Check_Controller() failed: {"deliveryDate":"2024-09-17T05:20:12.98Z","error":{"code":"JOC-402","message":"ControllerConnectionRefusedException: com.sos.commons.httpclient.exception.SOSConnectionRefusedException: [GET http://localhost:4444/controller/api HTTP/1.1]org.apache.http.conn.HttpHostConnectException: Connect to localhost:4444 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused"},"surveyDate":"2024-09-17T05:20:12.98Z"}
```

※エラーが発生する際は、JOCがコントローラーのポートにアクセスできることや、JOC/コントローラーのログ等を確認すること

### （３）コントローラーの自動登録

コントローラー/エージェント自動登録スクリプトのコマンド「register」を使用することにより、コントローラーを登録します。

```shell-session
$ ./deploy-controller.sh register "${request_options[@]}" \
    --primary-url=http://localhost:4444 --primary-title="Standalone Controller"
```

各オプションの説明は以下になります。

- --primary-url：コントローラーのURL（アドレス:ポート）を指定
- --primary-title：コントローラーの名称を指定

上記のオプションの他、様々なオプションがあります。詳細は以下をご参照下さい。

https://kb.sos-berlin.com/display/JS7/JS7+-+Unix+Shell+CLI+for+Controller+Deployment#JS7UnixShellCLIforControllerDeployment-optionsOptions

### （４）コントローラーの登録確認

JOCのWebUIにログインし、ダッシュボードのシステムステータスを確認し、コントローラーが自動登録されており、ステータスが実行中であることを確認します。

![SnapCrab_JS7 — Mozilla Firefox_2024-9-17_14-23-0_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/5502b2d8-cfcc-7048-77c2-1bd9fabee9f7.png)

# ５．エージェントの自動登録

エージェントも「deploy-controller.sh」を使用して自動登録します。

### （１）エージェントの起動確認

自動登録を行うエージェントのサービスが起動していることを確認します。

```shell-session
$ systemctl status agent_4445.service
```

※サービスがactiveで起動していることを確認する
サービスが起動していない場合は、起動します。

```shell-session
$ sudo systemctl start agent_4445.service
```

### （２）エージェントの自動登録

スクリプトをインストールしたディレクトリに移動し、変数「request_options」にJOCの接続情報を定義します。

```shell-session
$ cd /home/scheduler/work/js7.unix_shell_cli/bin
$ request_options=(--url=http://localhost:4446 --user=root --password=root --controller-id=controller)
```

※コントローラー/エージェント自動登録スクリプト内でREST APIを使用しているため、JOCのURL/ユーザ名/ユーザパスワードの情報を記載
　また、エージェントの場合は、controller-idを指定して、登録先のコントローラーを指定

コントローラー/エージェント自動登録スクリプトのコマンド「store-agent」を使用することにより、エージェントを登録します。

```shell-session
$ ./deploy-controller.sh store-agent "${request_options[@]}" \
    --agent-id=StandaloneAgent --agent-name=StandaloneAgent \
    --agent-url="http://localhost:4445" --title="Standalone Agent"
```

各オプションの説明は以下になります。

- --agent-id：登録するエージェントIDを指定
- --agent-name：エージェント名を指定
- --agent-url：エージェントのURL（アドレス:ポート）を指定
- --title：エージェントのタイトルを指定

コントローラー/エージェント自動登録スクリプトのコマンド「deploy-agent」を使用し、エージェントを配置します。

```shell-session
$ ./deploy-controller.sh deploy-agent "${request_options[@]}" --agent-id=StandaloneAgent
```

各オプションの説明は以下になります。

- --agent-id：上記の手順で自動登録したエージェントIDを指定

上記のオプションの他、様々なオプションがあります。詳細は以下をご参照下さい。

https://kb.sos-berlin.com/display/JS7/JS7+-+Unix+Shell+CLI+for+Controller+Deployment#JS7UnixShellCLIforControllerDeployment-optionsOptions

### （３）エージェントの登録確認

JOCのWebUIにログインし、ダッシュボードのエージェントステータスを確認し、自動登録したエージェントが接続になっていることを確認します。

![SnapCrab_JS7 — Mozilla Firefox_2024-9-17_14-50-7_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/9e1b1f05-2c18-5352-b1c7-d8286fb800f9.png)

# ６．エージェントの取り消しと削除

本スクリプトを使用し、エージェントの取り消し/削除も行うことができます。

### （１）エージェントの取り消し

スクリプトをインストールしたディレクトリに移動し、変数「request_options」にJOCの接続情報を定義します。

```shell-session
$ cd /home/scheduler/work/js7.unix_shell_cli/bin
$ request_options=(--url=http://localhost:4446 --user=root --password=root --controller-id=controller)
```

コントローラー/エージェント自動登録スクリプトのコマンド「revoke-agent」を使用することにより、エージェントの取り消しを行うことができます。

```shell-session
$ ./deploy-controller.sh revoke-agent "${request_options[@]}" --agent-id=StandaloneAgent
```
※--agent-idオプションで取り消しを行うAgentのIDを指定

### （２）エージェントの取り消し確認

JOCのWebUIにログインし、コントローラー/エージェント管理に移動し、エージェントステータスが、「未配置」になっていることを確認します。

![SnapCrab_JS7 — Mozilla Firefox_2024-9-17_15-5-59_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/0f30d1a0-cab4-230f-a832-32049e95d93e.png)

### （３）エージェントの削除

スクリプトをインストールしたディレクトリに移動し、変数「request_options」にJOCの接続情報を定義します。

```shell-session
$ cd /home/scheduler/work/js7.unix_shell_cli/bin
$ request_options=(--url=http://localhost:4446 --user=root --password=root --controller-id=controller)
```

コントローラー/エージェント自動登録スクリプトのコマンド「delete-agent」を使用することにより、エージェントの削除を行うことができます。

```shell-session
./deploy-controller.sh delete-agent "${request_options[@]}" --agent-id=StandaloneAgent
```

### （４）エージェントの削除確認

JOCのWebUIにログインし、コントローラー/エージェント管理に移動し、エージェントが削除されていることを確認します。

![SnapCrab_JS7 — Mozilla Firefox_2024-9-17_15-10-56_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/fde478d2-6cc7-2ff0-0d30-f0850050c636.png)


# ７．コントローラーの自動登録削除

本スクリプトを使用し、コントローラーの自動登録削除も行うことができます。

### （１）コントローラーの自動登録削除

スクリプトをインストールしたディレクトリに移動し、変数「request_options」にJOCの接続情報を定義します。

```shell-session
$ cd /home/scheduler/work/js7.unix_shell_cli/bin
$ request_options=(--url=http://localhost:4446 --user=root --password=root)
```

コントローラー/エージェント自動登録スクリプトのコマンド「unregister」を使用することにより、コントローラーの登録削除を行うことができます。

```shell-session
./deploy-controller.sh unregister "${request_options[@]}" --controller-id=controller
```

※--controller-id=controllerオプションで登録削除するコントローラーIDを指定


### （２）コントローラーの登録削除確認

JOCのWebUIにログインし、コントローラー/エージェント管理に移動し、コントローラーが削除されていることを確認します。

![SnapCrab_JS7 — Mozilla Firefox_2024-9-17_15-10-56_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/43e95f28-6403-e2fb-c96a-a4dae9a64c5e.png)


# ８．備考

本書では、スタンドアロン構成でのコントローラー／エージェントの自動登録を行いましたが、本スクリプトを使用することにより、有償ライセンスが必要となりますが、簡単にクラスタリング構成のコントローラー、エージェントの自動登録を行うことができます。
※有償ライセンスは、クラスタリング構成を行う際に必要となります。スクリプト自体は、ライセンスの必要はありません。

### （１）クラスタリング構成コントローラー自動登録例

クラスタリング構成のコントローラーの自動登録例を簡単にですが記載します。

```shell-session
$ cd /home/scheduler/work/js7.unix_shell_cli/bin
$ request_options=(--url=http://localhost:4446 --user=root --password=root)
$ ./deploy-controller.sh register "${request_options[@]}" \
    --primary-url=http://192.168.9.173:4444 \
    --primary-title="PRIMARY CONTROLLER" \
    --secondary-url=http://192.168.9.174:4444 \
    --secondary-title="SECONDARY CONTROLLER"
```

各オプションの説明は以下になります。

- --primary-url：プライマリコントローラーのURL（アドレス:ポート）を指定
- --primary-title：プライマリコントローラーの名称を指定
- --secondary-url：セカンダリマリコントローラーのURL（アドレス:ポート）を指定
- --secondary-title：セカンダリコントローラーの名称を指定

詳細は以下をご参照ください。

https://kb.sos-berlin.com/display/JS7/JS7+-+Unix+Shell+CLI+for+Controller+Deployment#JS7UnixShellCLIforControllerDeployment-Registering,CheckingandUnregisteringController

### （２）クラスタリング構成エージェント自動登録例

クラスタリング構成のエージェントの自動登録例を簡単にですが記載します。

```shell-session
$ cd /home/scheduler/work/js7.unix_shell_cli/bin
$ request_options=(--url=http://localhost:4446 --user=root --password=root --controller-id=controller)
$ ./deploy-controller.sh store-agent "${request_options[@]}" \
    --agent-id=AgentCluster \
    --agent-name=AgentCluster \
    --title="Agent Cluster" \
    --primary-subagent-id=primary-director \
    --primary-url=http://192.168.9.173:14445 \
    --primary-cluster-url=http://192.168.9.173:4444 \
    --primary-title="Primary Director" \
    --secondary-subagent-id=secondary-director \
    --secondary-url=http://192.168.9.174:14445 \
    --secondary-cluster-url=http://192.168.9.174:4444 \
    --secondary-title="Secondary Director"

$ ./deploy-controller.sh deploy-agent "${request_options[@]}" --agent-id=AgentCluster --cluster
```

各オプションの説明は以下になります。

- --agent-id：登録するクラスタエージェントIDを指定
- --agent-name：クラスタエージェント名を指定
- --title：クラスタエージェントのタイトルを指定
- --primary-subagent-id：プライマリサブエージェントIDを指定
- --primary-url：プライマリエージェントのURL（アドレス:ポート）を指定
- --primary-cluster-url：セカンダリーコントローラーがみるプライマリーコントローラーURL
- --primary-title：プライマリエージェントの名称を指定
- --secondary-subagent-id：セカンダリサブエージェントIDを指定
- --secondary-url：セカンダリエージェントのURL（アドレス:ポート）を指定
- --secondary-cluster-url：プライマリーコントローラーがみるセカンダリーコントローラーURL
- --secondary-title：セカンダリエージェントの名称を指定

詳細は以下をご参照ください。

https://kb.sos-berlin.com/display/JS7/JS7+-+Unix+Shell+CLI+for+Controller+Deployment#JS7UnixShellCLIforControllerDeployment-StoringandDeployingAgents