JS7®Unix シェル コマンドライン インターフェイス

JS7®JobSchedulerは独SOS社(Software- und Organisations-Service GmbH)によって開発されている、オープンソースのジョブ管理システムです。
Unix シェル コマンド ライン インターフェイスを使用して、デプロイメント操作とステータス操作を実行できます。

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

* Unix Shell CLI for Controller Deployment

https://kb.sos-berlin.com/display/JS7/JS7+-+Unix+Shell+Command+Line+Interface

* Unix Shell CLI for Identity Service Deployment

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

* Unix Shell CLI for Git Deployment

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

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

 - ナレッジベース（英語）　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
**JS7®コントローラー／エージェントの自動登録スクリプト** https://qiita.com/Yoshitami/items/01b29099e3b7b9161f90

# １．コマンドラインインターフェイス スクリプトについて

Unixシェルコマンドラインインターフェイス (CLI) を使用することにより、以下のようなデプロイメント操作とステータス操作を実行できます。

* コントローラーデプロイメント
   * 初期設定: register, unregister
   * エージェント管理: store, delete, deploy, revoke
* コントローラーステータス操作
   * コントローラー操作: terminate, restart, cancel, status
   * エージェント操作: enable, disable, status, reset
   * コントローラーとエージェントでのクラスタ操作: switch-over
* ワークフローデプロイメント
   * オブジェクト: export, import, deploy, release, store, remove
   * トラッシュ: restore, delete
* ワークフローステータス操作
   * オーダー: add, cancel, suspend, resume, let run, transfer
   * ワークフロー: suspend, resume
   * ジョブと指示: stop, unstop, skip, unskip
   * つ: post, get, delete
* JOCコックピットステータス操作
   * status, check license
* Identityサービス操作
   * Identityサービス：Getting,Creating,Updating,Renaming
   * ロール：Getting,Creating,Updating,Renaming
   * 権限：Creating,Updating,Renaming
   * フォルダー権限：Creating,Updating,Renaming
   * アカウント：Creating,Updating,Enabling,Disabling,Blocking,Unblocking,
Renaming,Removing
   * ID管理の設定：Service, Roles, Permissions,Accounts
* Git操作
   * GIT資格情報の管理
   * Gitリポジトリのクローニング
   * GITリポジトリ内のオブジェクトの管理：Listing,Storing,Updating,Deleting
   * GITリポジトリからオブジェクトの展開

本書では、コントローラーステータス操作、ワークフローデプロイメント、ワークフローステータス操作、JOCコックピットステータス操作、Identityサービス操作、Git操作の一部の使用例を記載します。
コントローラーデプロイメントは前回の記事の以下をご参照ください。

https://qiita.com/Yoshitami/items/01b29099e3b7b9161f90

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

・CentOS 8.5
・JS7 2.7.3
・MariaDB 10.3.28
・openjdk 17.0.2
・SELinuxはDisabled、Firewalldは停止されていること
・スタンドアロン構成
・JOC、Controller、Agent、DBは同居
・パッケージをダウンロードするためインターネットへの接続が可能なこと
・JS7は「scheduler」ユーザにてインストール
・controller-idは「controller」
・agent-idは「agent」
※JOC、Controller、Agentはインストール済みであり、JOCにController/Agentは登録されておりサービスは起動されていること
※jqコマンドがインストール済みで、JS7インストールユーザが使用可能であること
　（コマンドはスクリプト内で使用されているためインストールが必要、本書でのJS7インストールユーザは「scheduler」とする）
※本書では、GitはGitHubを使用、GitHubへの公開鍵の登録、リポジトリは作成済みであること（Gitの操作を行わない場合は不要）

https://qiita.com/Yoshitami/items/4c71039acb401bfca660

# ３．コマンドライン インターフェイス スクリプトのインストール

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

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-identity-service.sh
　　　　　deploy-workflow.sh
　　　　　operate-controller.sh
　　　　　operate-joc.sh
　　　　　operate-workflow.sh
　　　　　deploy-identity-service.sh
　　　　　deploy-git.sh

         
# ４．コントローラーステータス操作

スクリプトを使用して、コントローラーのターミネート、エージェントの無効化を行います。
他にもクラスタリングのコントローラのターミネート、リセット、キャンセル、切り替え等も本スクリプトで行えることができます。
詳細は以下をご確認ください。

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

コントローラーステータス操作のスクリプトでは、以下のコマンドを使用することができます。

* terminate：コントローラーを終了
* restart：コントローラーを再起動
* cancel：コントローラーをキャンセル
* cancel-restart：コントローラーをキャンセルして再起動
* status：コントローラーのステータス情報
* version：JOCコックピット、コントローラー、エージェントのバージョン情報
* check：JOCコックピットとコントローラー間の接続をテスト
* switch-over：コントローラークラスタの切り替え
* appoint-nodes：初期操作時にコントローラークラスタが結合されていない場合に使用
* confirm-loss：コントローラークラスタのノード損失を確認
* enable-agent：エージェントの有効化
* disable-agent：エージェントの無効化
* status-agent：エージェントのステータス情報
* reset-agent：エージェントのリセット
* switch-over-agent：エージェントクラスタの切り替え
* confirm-loss-agent：エージェントクラスタのノード損失を確認
* enable-subagent：サブエージェントの有効化
* disable-subagent：サブエージェントの無効化
* reset-subagent：サブエージェントのリセット
* encrypt：証明書を使用した暗号化
* decrypt：証明書を使用した復号化

上記の各コマンドの詳細は以下をご確認ください。

https://kb.sos-berlin.com/display/JS7/JS7+-+Unix+Shell+CLI+for+Controller+Status+Operations#JS7UnixShellCLIforControllerStatusOperations-commandsCommands

### （１）スタンドアロンコントローラーのターミネート

スクリプトをインストールしたディレクトリに移動し、変数「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/ユーザ名/ユーザパスワード/コントローラーIDの情報を記載

スクリプトを使用して、コントローラーをターミネートします。

```shell-session
$ ./operate-controller.sh terminate "${request_options[@]}"
```

スクリプトを使用してコントローラーのステータスを確認します。

```shell-session
$ ./operate-controller.sh status "${request_options[@]}" | jq .
```
```shell-session
{
  "controller": {
    "componentState": {
      "_text": "unknown",
      "severity": 2
    },
    "connectionState": {
      "_text": "unreachable",
      "severity": 2
    },
    "controllerId": "controller",
    "host": "stand_js7",
    "id": 1,
    "isCoupled": false,
    "javaVersion": "17.0.2+8-86",
    "os": {
      "architecture": "amd64",
      "distribution": "4.18.0-348.7.1.el8_5.x86_64",
      "name": "Linux"
    },
    "role": "STANDALONE",
    "securityLevel": "LOW",
    "startedAt": "2025-01-15T04:30:33.72Z",
    "surveyDate": "2025-01-15T04:33:14.879Z",
    "title": "STANDALONE CONTROLLER",
    "url": "http://localhost:4444",
    "version": "2.7.3"
  },
  "deliveryDate": "2025-01-15T04:33:14.879Z"
}
```
connectionStateが、"unreachable"と表示されコントローラーがターミネートされていることが分かります。
※本スクリプトを使用してのコントローラーの起動はできないため、起動する際はサービスの起動から行う必要があります。

### （２）スタンドアロンコントローラーの再起動

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

スクリプトを使用して、コントローラーを再起動します。

```shell-session
$ ./operate-controller.sh restart "${request_options[@]}"
```

スクリプトを使用してコントローラーのステータスを確認します。

```shell-session
$ ./operate-controller.sh status "${request_options[@]}" | jq .
```
```shell-session
{
  "controller": {
    "componentState": {
      "_text": "operational",
      "severity": 0
    },
    "connectionState": {
      "_text": "established",
      "severity": 0
    },
    "controllerId": "controller",
    "host": "stand_js7",
    "id": 1,
    "isCoupled": false,
    "javaVersion": "17.0.2+8-86",
    "os": {
      "architecture": "amd64",
      "distribution": "4.18.0-348.7.1.el8_5.x86_64",
      "name": "Linux"
    },
    "role": "STANDALONE",
    "securityLevel": "LOW",
    "startedAt": "2025-03-28T05:02:38.153Z",
    "surveyDate": "2025-03-28T05:03:05.01Z",
    "title": "STANDALONE CONTROLLER",
    "url": "http://localhost:4444",
    "version": "2.7.3"
  },
  "deliveryDate": "2025-03-28T05:03:05.013Z"
}
```
connectionStateが、"established"と表示され、startedAtで再開日時が表示されます。

### （３）スタンドアロンコントローラーのキャンセル

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

スクリプトを使用して、コントローラーをキャンセルします。
コントローラーはエージェントから直ちに切断され、ジャーナル スナップショットを作成せずに終了します。

```shell-session
$ ./operate-controller.sh cancel "${request_options[@]}"
```

スクリプトを使用してコントローラーのステータスを確認します。

```shell-session
$ ./operate-controller.sh status "${request_options[@]}" | jq .
```
```shell-session
{
  "controller": {
    "componentState": {
      "_text": "unknown",
      "severity": 2
    },
    "connectionState": {
      "_text": "unreachable",
      "severity": 2
    },
    "controllerId": "controller",
    "host": "stand_js7",
    "id": 1,
    "isCoupled": false,
    "javaVersion": "17.0.2+8-86",
    "os": {
      "architecture": "amd64",
      "distribution": "4.18.0-348.7.1.el8_5.x86_64",
      "name": "Linux"
    },
    "role": "STANDALONE",
    "securityLevel": "LOW",
    "startedAt": "2025-03-28T05:02:38.153Z",
    "surveyDate": "2025-03-28T05:08:23.538Z",
    "title": "STANDALONE CONTROLLER",
    "url": "http://localhost:4444",
    "version": "2.7.3"
  },
  "deliveryDate": "2025-03-28T05:08:23.538Z"
}
```
connectionStateが、"unreachable"と表示され、キャンセルされたことが分かります。
※本スクリプトを使用してのコントローラーの起動はできないため、起動する際はサービスの起動から行う必要があります。
また、コマンドを「cancel」から「cancel-restart」に変更することにより、キャンセル後、再起動することができます。


### （４）スタンドアロンエージェントの無効化

本スクリプトを使用することにより、エージェントの操作も行うことができます。

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

エージェントを無効化します。

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

スクリプトを使用してエージェントのステータスを確認します。

```shell-session
$ ./operate-controller.sh status-agent "${request_options[@]}" --agent-id=agent | jq .
```

```shell-session
{
  "agents": [
    {
      "agentId": "agent",
      "agentName": "aget",
      "controllerId": "controller",
      "disabled": true,
      "healthState": {
        "_text": "NO_SUBAGENTS_ARE_COUPLED_AND_ENABLED",
        "severity": 2
      },
      "runningTasks": 0,
      "state": {
        "_text": "COUPLED",
        "severity": 0
      },
      "url": "http://localhost:4445",
      "version": "2.7.3"
    }
  ],
  "deliveryDate": "2025-01-15T04:49:29.344Z",
  "surveyDate": "2025-01-15T04:48:53.072Z"
}
```
"disabled": trueになっており、エージェントが無効化にされたことが分かります。

### （５）スタンドアロンエージェントの有効化

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

エージェントを有効化します。

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

スクリプトを使用してエージェントのステータスを確認します。

```shell-session
$ ./operate-controller.sh status-agent "${request_options[@]}" --agent-id=agent | jq .
```

```shell-session
{
  "agents": [
    {
      "agentId": "agent",
      "agentName": "aget",
      "controllerId": "controller",
      "disabled": false,
      "healthState": {
        "_text": "ALL_SUBAGENTS_ARE_COUPLED_AND_ENABLED",
        "severity": 0
      },
      "runningTasks": 0,
      "state": {
        "_text": "COUPLED",
        "severity": 0
      },
      "url": "http://localhost:4445",
      "version": "2.7.3"
    }
  ],
  "deliveryDate": "2025-03-28T05:17:31.392Z",
  "surveyDate": "2025-03-28T05:17:28.233Z"
}
```
"disabled": falseになっており、エージェントが無効化にされたことが分かります。

### （６）スタンドアロンエージェントのリセット

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

エージェントをリセットします。
エージェントがリセットされると、エージェントは終了して再起動します。エージェントで実行されているジョブ プロセスは強制的に終了され、オーダーは失敗状態に設定されます。

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

スクリプトを使用してエージェントのステータスを確認します。

```shell-session
$ ./operate-controller.sh status-agent "${request_options[@]}" --agent-id=agent | jq .
```

```shell-session
{
  "agents": [
    {
      "agentId": "agent",
      "agentName": "aget",
      "controllerId": "controller",
      "disabled": false,
      "healthState": {
        "_text": "ALL_SUBAGENTS_ARE_COUPLED_AND_ENABLED",
        "severity": 0
      },
      "runningTasks": 0,
      "state": {
        "_text": "COUPLED",
        "severity": 0
      },
      "url": "http://localhost:4445",
      "version": "2.7.3"
    }
  ],
  "deliveryDate": "2025-03-28T05:21:19.321Z",
  "surveyDate": "2025-03-28T05:19:52.768Z"
}
```
deliveryDateで再開日時が表示されます。

# ５．ワークフローデプロイメント

スクリプトを使用して、ワークフローをエキスポート、インポート、デプロイを行います。
他にもワークフローの削除等も行えます。
詳細は以下をご参照ください。

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

### （１）ワークフローのエキスポート

本スクリプトを使用し、ワークフローをエキスポートします。
ワークフローは作成済みとし、本手順ではサンプルとして以下のワークフローを使用するものとします。

ワークフローのパス：/test/work
ワークフロー名：sample1,sample2

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

ワークフローをエキスポートします。

```shell-session
$ ./deploy-workflow.sh export "${request_options[@]}"\
   --file=sample.zip --path=/test/work/sample1,/test/work/sample2 --type=WORKFLOW
```

各オプションの説明は以下になります。
* --file：エキスポートするファイル名
* --path：エキスポートするワークフロー名（,区切りで複数選択）
* --type：ワークフローや、スケジュール等のオブジェクトを指定（,区切りで複数選択）

また、以下のコマンドを使用することにより、ワークフローやスケジュール等のオブジェクトごとではなく、指定したフォルダーすべてをエキスポートすることができます。

```shell-session
$ ./deploy-workflow.sh export "${request_options[@]}" \
   --file=sample.zip  --folder=/ --recursive
```

各オプションの説明は以下になります。
* --file：エキスポートするファイル名
* --folder：エキスポートするフォルダーを指定
* --recursive：--folderオプションを使用する際、再帰的に検索されることを指定

### （２）ワークフローのインポート

本スクリプトを使用し、ワークフローをインポートします。
インポートするワークフローのエキスポートファイルはあらかじめ用意済みで、本手順ではサンプルとして以下のファイルを使用するものとします。

インポートするファイルのパス：/home/scheduler/work/js7.unix_shell_cli/bin
ワークフロー名：sample.zip

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

ワークフローをエキスポートします。
```shell-session
$ ./deploy-workflow.sh import "${request_options[@]}" \
   --file=sample.zip --overwrite
```

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

* --file：インポートするファイル名
* --overwrite：importコマンドを使用する場合、同じ名前とタイプのオブジェクトが上書きされることを指定

また、以下のコマンドを使用することにより、オブジェクトを新しいフォルダーにインポートし、サフィックスを適用することができます。

```shell-session
$ ./deploy-workflow.sh import "${request_options[@]}" \
   --file=sample.zip --folder=/Version2 --suffix=V2
```

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

* --file：インポートするファイル名
* --folder：新しいインポート先のフォルダーを指定（フォルダーがない時は作成される）
* --suffix：オブジェクトに追加されるサフィックスを指定

### （３）ワークフローのデプロイ

本スクリプトを使用し、ワークフローをデプロイします。
デプロイするワークフローはまだデプロイされていないものを使用し、本手順ではサンプルとして以下のワークフローを使用するものとします。

ワークフローのパス：/test/work
ワークフロー名：sample1,sample2

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

ワークフローをデプロイします。

```shell-session
$ cd /home/scheduler/work/js7.unix_shell_cli/bin
$ ./deploy-workflow.sh deploy "${request_options[@]}" \
   --path=/test/work/sample1,/test/work/sample2 --type=WORKFLOW
```

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

* --path：デプロイするワークフローを指定
* --type：ワークフローや、スケジュール等のオブジェクトを指定（,区切りで複数選択）
* --date-from：

カレンダー、スケジュールは以下のコマンドでデプロイすることができます。

カレンダーのデプロイ：
```shell-session
$ ./deploy-workflow.sh release "${request_options[@]}" \
   --path=/test/work/calendar --type=WORKINGDAYSCALENDAR 
```

スケジュールのデプロイ：
```shell-session
$ ./deploy-workflow.sh release "${request_options[@]}" \
   --path=/test/work/all --type=SCHEDULE
```


また、以下のコマンドを使用することにより、フォルダーごとのワークフロー/スケジュール等のデプロイすることができます。

フォルダーごとのワークフローのデプロイ：
```shell-session
$ ./deploy-workflow.sh deploy "${request_options[@]}" \
    --folder=/test --recursive 
```

フォルダーごとのスケージュール/カレンダーのデプロイ：
```shell-session
$ ./deploy-workflow.sh release "${request_options[@]}" \
   --folder=/test/work --recursive
```

# ６．ワークフローステータス操作

スクリプトを使用して、オーダの開始、ワークフローのキャンセルを行います。
他にもオーダのサスペンド等も行うことができます。
詳細は以下をご参照ください。

https://kb.sos-berlin.com/display/JS7/JS7+-+Unix+Shell+CLI+for+Workflow+Status+Operations

### （１）オーダの開始

本スクリプトを使用し、オーダを開始させます。
ワークフローは作成済みとし、本手順ではサンプルとして以下のワークフローを使用するものとします。

ワークフローのパス：/test/work
ワークフロー名：sample1

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

オーダを開始します。

```shell-session
$ ./operate-workflow.sh add-order "${request_options[@]}" \
   --workflow=/test/work/sample1
```

各オプションの説明は以下になります。
* --workflow：オーダを開始するワークフローを指定

また、オプションの「--start-position」、「--end-position」を使用することにより、ワークフローの開始/終了の位置を指定することができます。

### （２）オーダのキャンセル

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

一度オーダを開始します。

```shell-session
$ ./operate-workflow.sh add-order "${request_options[@]}" \
   --workflow=/test/work/sample1
```

開始したオーダをキャンセルします。

```shell-session
$ ./operate-workflow.sh cancel-order "${request_options[@]}" \
   --workflow=/test/work/sample1 \
   --state=SCHEDULED,PROMPTING,SUSPENDED,INPROGRESS,RUNNING
```


各オプションの説明は以下になります。
* --workflow：オーダを開始するワークフローを指定
* --state：オーダーのステータス状態を指定（,区切りで複数選択し、PENDING、SCHEDULED、INPROGRESS、RUNNING、SUSPENDED、WAITING、PROMPTING、FAILED、BLOCKEDより指定する


# ７．JOCコックピットステータス操作

スクリプトを使用して、JOCのステータス、ライセンスの確認を行います。
他にもクラスタリングの切り替え等も本スクリプトで行えることができます。
詳細は以下をご参照ください。

https://kb.sos-berlin.com/display/JS7/JS7+-+Unix+Shell+CLI+for+JOC+Cockpit+Status+Operations

JOCコックピットステータス操作のスクリプトでは、以下のコマンドを使用することができます。

* status：JOCコックピット、コントローラー、データベースのステータス情報
* status-agent：エージェントのステータス情報
* health-check：JOCコックピット、コントローラー、エージェントをヘルスチェック
* cancel-restart：コントローラーをキャンセルして再起動
* version：JOCコックピット、コントローラー、エージェントのバージョン情報
* switch-over：JOCコックピットクラスタの切り替え
* restart-service：JOCコックピット バックグラウンドサービスを再起動
* run-service：JOCコックピットのバックグラウンドサービスを開始
* check-license：JOCコックピットで使用可能なJS7ライセンスと、期間有効の確認
* get-settings：JOCコックピット設定情報確認
* store-settings：JOCコックピット設定更新
* report-daily-plan：実行計画のレポート出力
* report-order-history：履歴のレポート出力
* report-task-history：タスクのレポート出力
* encrypt：証明書を使用した暗号化
* decrypt：証明書を使用した復号化

上記の各コマンドの詳細は以下をご確認ください。

https://kb.sos-berlin.com/display/JS7/JS7+-+Unix+Shell+CLI+for+JOC+Cockpit+Status+Operations#JS7UnixShellCLIforJOCCockpitStatusOperations-Commands

### （１）ステータスの確認

本スクリプトを使用し、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 --controller-id=controller)
```

JOCのステータスの確認を行います。

```shell-session
$ ./operate-joc.sh status "${request_options[@]}" --controller-id=controller | jq .
 ```

 ```shell-session
{
  "clusterState": {
    "_text": "ClusterUnknown",
    "severity": 2
  },
  "controllers": [
    {
      "componentState": {
        "_text": "operational",
        "severity": 0
      },
      "connectionState": {
        "_text": "established",
        "severity": 0
      },
      "controllerId": "controller",
      "host": "stand_js7",
      "id": 1,
      "isCoupled": false,
      "javaVersion": "17.0.2+8-86",
      "os": {
        "architecture": "amd64",
        "distribution": "4.18.0-348.7.1.el8_5.x86_64",
        "name": "Linux"
      },
      "role": "STANDALONE",
      "securityLevel": "LOW",
      "startedAt": "2025-01-17T02:33:17.744Z",
      "surveyDate": "2025-01-17T06:26:57.695Z",
      "title": "STANDALONE CONTROLLER",
      "url": "http://localhost:4444",
      "version": "2.7.3"
    }
  ],
  "database": {
    "componentState": {
      "_text": "operational",
      "severity": 0
    },
    "connectionState": {
      "_text": "established",
      "severity": 0
    },
    "dbms": "MySQL",
    "version": "10.3.28-MariaDB"
  },
  "deliveryDate": "2025-01-17T06:26:57.699Z",
  "jocs": [
    {
      "componentState": {
        "_text": "operational",
        "severity": 0
      },
      "connectionState": {
        "_text": "established",
        "severity": 0
      },
      "controllerConnectionStates": [
        {
          "role": "STANDALONE",
          "state": {
            "_text": "established",
            "severity": 0
          }
        }
      ],
      "current": true,
      "host": "stand_js7",
      "id": 1,
      "instanceId": "joc#0",
      "isApiServer": false,
      "lastHeartbeat": "2025-01-17T06:26:55Z",
      "memberId": "stand_js7:fd7f13e301710cf91b919915213904a5c3ea19b65463bc60d2e8162fcaa8a40d",
      "os": {
        "architecture": "amd64",
        "distribution": "4.18.0-348.7.1.el8_5.x86_64",
        "name": "Linux"
      },
      "securityLevel": "LOW",
      "startedAt": "2025-01-17T02:33:49Z",
      "title": "JOC COCKPIT",
      "url": "http://192.168.9.181:4446",
      "version": "2.7.3"
    }
  ]
}
 ```

 コマンドの結果により、JOCのステータス情報、セキュリティレベル、クラスタリングの構成等を確認することができます。

### （２）ヘルスチェック

本スクリプトを使用し、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 --controller-id=controller)
```

JOCのヘルスチェックを行います。

```shell-session
$ ./operate-joc.sh health-check "${request_options[@]}" --controller-id=controller
 ```

 ```shell-session
Database: MySQL 10.3.28-MariaDB
    Component State    : operational (0)
    Connection State   : established (0)
JOC Cockpit: JOC COCKPIT, URL: http://192.168.9.181:4446, Date: 2025-03-28T05:59:22.196Z
    Cluster Node State:  (1)
    Component State:    operational (0)
    Connection State:   established (0)
[WARN] JOC Cockpit Cluster State: ClusterUnknown (2)
[ERROR] Fatal JOC Cockpit Cluster State: no active JOC Cockpit instance found
STANDALONE Controller: STANDALONE CONTROLLER, ID: controller, URL: http://localhost:4444, is coupled: , Date: 2025-03-28T05:59:22.182Z
    Cluster Node State:  (1)
    Component State:    operational (0)
    Connection State:   established (0)
[WARN] Fatal Controller Cluster State: no active Controller instance found
STANDALONE Agent: aget, ID: agent, URL: http://localhost:4445, Controller ID: controller, Disabled: , Date: 2025-03-28T05:43:59.75Z
    Component State:    COUPLINGFAILED (2)
[WARN] Fatal Component State: COUPLINGFAILED (2)
[ERROR] health check identified 2 fatal problems
```

上記のように表示され、スクリプトを使用することにより、JOCコックピット、コントローラー、エージェント インスタンスのステータス情報を確認することができ、どこでエラーが発生しているのか確認することができます。
※クラスタ構成でない場合は、クラスタステータスの箇所はERRORと表示されます。

### （３）ライセンスの確認

本スクリプトを使用し、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 --controller-id=controller)
```

ライセンスの確認を行います。

```shell-session
$ ./operate-joc.sh check-license "${request_options[@]}"
```

```shell-session
.... License type: COMMERCIAL_VALID
.... License valid: true
.... License valid from: 2024-06-06T06:22:53Z
.... License valid until: 2025-06-16T06:22:53Z
```

スクリプトを使用することにより、ライセンスの有効期限を確認することができます。

また、オプションの「--validity-days」を使用することにより、ライセンスの有効な期限までの日数を指定することができます。（デフォルトでは60日）

終了コード 0：指定された期間の有効ライセンス
終了コード 2：オープン ソース ライセンスが使用されている場合/ライセンスの有効期限が切れている
終了コード 3：指定された日数内に有効期限が切れる有効なライセンス

```shell-session
$ date
2025年  2月  4日 火曜日 15:12:06 JST
$ ./operate-joc.sh check-license "${request_options[@]}" --validity-days=125
.... License type: COMMERCIAL_VALID
.... License valid: true
.... License valid from: 2024-06-06T06:22:53Z
.... License valid until: 2025-06-16T06:22:53Z
Check_License() license check warning: license will expire on 2025-06-16T06:22:53Z
$ echo $?
3
```

### （４）実行計画のレポート出力

本スクリプトを使用し、実行計画のレポート出力を行います。

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

実行計画を出力します。

```shell-session
$ ./operate-joc.sh report-daily-plan "${request_options[@]}" \
    --date-from="2024-12-09" --date-to="2025-03-28" \
    --csv > /tmp/daily-plan.csv
```

各オプションの説明は以下になります。
* --date-from：開始日自
* --date-to：開始日至（オプションを付けない場合は、date-fromで指定した日から現在まですべて表示）
* --csv：csv形式で表示(指定しない場合はJSON形式で表示)

以下のように実行計画のレポートが出力されることを確認します。
```shell-session
$ cat /tmp/daily-plan.csv 
```

```shell-session
"controllerId","cyclicOrder_count","cyclicOrder_firstOrderId","cyclicOrder_firstStart","cyclicOrder_lastOrderId","cyclicOrder_lastStart","expectedEndTime","late","orderId","orderName","period_begin","period_end","period_repeat","plannedStartTime","schedulePath","startMode","state__text","state_severity","surveyDate","workflowPath"
"controller","55","#2025-03-28#C14082736502-00090-144-a","2025-03-28T05:50:00.000+00:00","#2025-03-28#C14082736502-00144-144-a","2025-03-28T14:50:00.000+00:00","2025-03-28T05:50:09.000+00:00","false","#2025-03-28#C14082736502-00090-144-a","a","2025-03-28T15:00:00.000+00:00","2025-03-28T15:00:00.000+00:00","600","2025-03-28T05:50:00.000+00:00","/test/work/all","1","SUBMITTED","5","2025-03-28T05:47:07.000+00:00","/test/work/sample1"
```

### （５）履歴のレポート出力

本スクリプトを使用し、履歴のレポート出力を行います。

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

履歴を出力します。

```shell-session
$ ./operate-joc.sh report-order-history "${request_options[@]}" \
    --date-from="2024-12-09" --date-to="2025-03-28" \
    --csv > /tmp/history.csv
```

各オプションの説明は以下になります。
* --date-from：開始日自
* --date-to：開始日至（オプションを付けない場合は、date-fromで指定した日から現在まですべて表示）
* --csv：csv形式で表示(指定しない場合はJSON形式で表示)

以下のように実行計画のレポートが出力されることを確認します。
```shell-session
$ cat /tmp/history.csv 
```

```shell-session
"controllerId","endTime","historyId","orderId","orderState__text","orderState_severity","plannedTime","position","sequence","startTime","state__text","state_severity","surveyDate","workflow"
"controller","2025-02-26T03:45:43.000+00:00","35","#2025-02-26#T54153304817-root","FINISHED","6","2025-02-26T03:45:33.000+00:00","null","0","2025-02-26T03:45:33.000+00:00","SUCCESSFUL","6","2025-02-26T03:45:44.000+00:00","/test/work/sample1"
"controller","2025-02-26T03:44:45.000+00:00","34","#2025-02-26#T54147490816-root","FINISHED","6","2025-02-26T03:44:34.000+00:00","null","0","2025-02-26T03:44:34.000+00:00","SUCCESSFUL","6","2025-02-26T03:44:46.000+00:00","/test/work/sample1"
"controller","2025-02-26T03:44:28.000+00:00","33","#2025-02-26#T54145844015-root","FINISHED","6","2025-02-26T03:44:18.000+00:00","null","0","2025-02-26T03:44:18.000+00:00","SUCCESSFUL","6","2025-02-26T03:44:29.000+00:00","/test/work/sample1"
```


# ８．Identityサービス

スクリプトを使用して、IDサービスのJOC-INITIALにアカウントの追加、確認、削除を行います。
詳細は以下をご参照ください。

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

### （１）アカウントの作成

本スクリプトを使用し、アカウントを作成します。

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

アカウント「Yamashita」を作成します。

```shell-session
$ ./deploy-identity-service.sh store-account "${request_options[@]}" \
    --service=JOC-INITIAL --account=Yamashita \
    --account-password=Pasword --role=all
 ```

各オプションの説明は以下になります。
* --service：IDタイプを指定（JOC-INITIAL,LDAP, OIDC等を指定）
* --account：作成するアカウント名
* --account-password：作成するアカウントパスワード
* --role：ロールを指定

### （２）アカウントの確認

本スクリプトを使用し、作成したアカウントの確認を行います。

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

アカウントの確認を行います。

```shell-session
$ ./deploy-identity-service.sh get-account "${request_options[@]}" \
    --service=JOC-INITIAL --account=Yamashita
```

各オプションの説明は以下になります。
* --service：IDタイプを指定（指定しない場合は、すべてのIDサービスが表示される）
* --account：アカウントを指定（指定しない場合は、すべてのアカウントが表示される）

以下のように表示されることを確認します。
また、JOCのWebUIに作成したアカウントでログインできることを確認します。

```shell-session
[
  {
    "identityServiceName": "JOC-INITIAL",
    "accountName": "Yamashita",
    "forcePasswordChange": false,
    "disabled": false,
    "blocked": false,
    "roles": [
      "all"
    ]
  }
]
```

### （３）アカウントの削除

本スクリプトを使用し、作成したアカウントの削除を行います。

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

アカウント「Yamashita」を削除します。

```shell-session
$ ./deploy-identity-service.sh remove-account "${request_options[@]}" \
    --service=JOC-INITIAL --account=Yamashita
 ```

各オプションの説明は以下になります。
* --service：IDタイプを指定（JOC-INITIAL,LDAP, OIDC等を指定）
* --account：削除するアカウント名

アカウントの確認を行います。

```shell-session
$ ./deploy-identity-service.sh get-account "${request_options[@]}" \
    --service=JOC-INITIAL --account=Yamashita
```

以下のように何も表示されないことを確認します。
また、JOCのWebUIに削除したアカウントでログインできないことを確認します。

```shell-session
[]
```


# ９．Git操作

スクリプトを使用して、Gitのクレデンシャル情報の登録、リポジトリのクローン、リポジトリへの保存を行います。
詳細は以下をご参照ください。

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

### （１）クレデンシャル情報の登録

本スクリプトを使用し、クレデンシャル情報の登録を行います。
GitHubへの公開鍵は事前に登録済みとします。

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

クレデンシャル情報を登録します。

```shell-session
$ ./deploy-git.sh store-credentials "${request_options[@]}" \
    --server=github.com --user-account="Yoshitami-Y" \
    --user-name="Yoshitami-Y" --user-mail="yamashita@ossl.co.jp" \
    --user-private-key=/home/scheduler/.ssh/id_rsa
 ```

各オプションの説明は以下になります。
* --server：Gitサーバを指定
* --user：Gitサーバでの認証アカウント名を指定
* --user-name：Gitサーバでの認証ユーザ名を指定
* --user-mail：Gitサーバでの認証メールアドレスを指定
* user-private：Gitサーバでの認証秘密鍵のパスを指定

クレデンシャル情報が登録されたことを確認します。

```shell-session
$ ./deploy-git.sh get-credentials    "${request_options[@]}"
 ```

```shell-session
 {
  "credentials": [
    {
      "email": "yamashita@ossl.co.jp",
      "gitAccount": "Yoshitami-Y",
      "gitServer": "github.com",
      "keyfilePath": "/home/scheduler/.ssh/id_rsa",
      "username": "Yoshitami-Y"
    }
  ]
}
 ```


 ### （２）Gitリポジトリのクローン

本スクリプトを使用し、Gitリポジトリのクローンを行います。
※GitHubにてリポジトリは事前に作成済みとします。

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

リポジトリをクローンします。

```shell-session
$ ./deploy-git.sh clone "${request_options[@]}" \
    --folder=/Accounting --remote-url="git@github.com:Yoshitami-Y/testrepo.git"
 ```

各オプションの説明は以下になります。
* --folder：クローンするフォルダーを指定（フォルダーが存在しない場合は作成される）
* --remote-url：リポジトリのURLを指定
また、「--branch」を指定することにより特定のブランチを指定することもできます。

リポジトリがクローンされたことを確認します。

```shell-session
./deploy-git.sh list-item "${request_options[@]}" --folder=/Accounting --recursive
```

```shell-session
{
  "folders": [],
  "items": [],
  "lastModified": "2025-03-25T01:56:13.913Z",
  "name": "Accounting",
  "path": "/Accounting"
}
```


 ### （３）Gitリポジトリへの保存

本スクリプトを使用し、Gitリポジトリにワークフローを保存します。
※ワークフローは事前に作成済みとします。

スクリプトをインストールしたディレクトリに移動し、変数「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)
```

ロールアウトリポジトリにアイテムを保存します。

```shell-session
$ ./deploy-git.sh store-item "${request_options[@]}" --folder=/Accounting --recursive
```
各オプションの説明は以下になります。
* --folder：リポジトリに保存するフォルダーを指定
* --recursive：--folderオプションと一緒に使用、サブフォルダーを再帰的に処理

※また、--pathオプションを指定し、オブジェクト単位で保存することも可能、
　--pathオプションを使用する際は、--typeオプションを指定し、リポジトリに保存するオブジェクトのタイプを指定（WORKFLOW, FILEORDERSOURCE, JOBRESOURCE, NOTICEBOARD, LOCKを指定）

ロールアウトディレクトリに保存されたオブジェクトを確認します。

```shell-session
$ ./deploy-git.sh list-item "${request_options[@]}" --folder=/Accounting --recursive
```

```shell-session
{
  "folders": [
    {
      "folders": [],
      "items": [
        {
          "folder": "/Accounting/work",
          "lastModified": "2025-03-25T01:56:35.518Z",
          "objectName": "test-job1",
          "objectType": "WORKFLOW"
        }
      ],
      "lastModified": "2025-03-25T01:56:51.879Z",
      "name": "work",
      "path": "/Accounting/work"
    },
    {
      "folders": [],
      "items": [
        {
          "folder": "/Accounting/work2",
          "lastModified": "2025-03-25T01:56:35.518Z",
          "objectName": "test-job2",
          "objectType": "WORKFLOW"
        }
      ],
      "lastModified": "2025-03-25T01:56:51.879Z",
      "name": "work2",
      "path": "/Accounting/work2"
    }
  ],
  "items": [],
  "path": "/Accounting"
}
```

JOCコックピットロールアウトリポジトリに保存します。

```shell-session
$ ./deploy-git.sh add "${request_options[@]}" --folder=/Accounting
```

JOCコックピットのロールアウトリポジトリに変更をコミットし、コミットハッシュを保持します
```shell-session
$ hash=$(./deploy-git.sh commit "${request_options[@]}" --folder=/Accounting --message="v.1.23.34")
 ```

JOC コックピットのロールアウトリポジトリからリモートリポジトリに変更をプッシュします。

```shell-session
$ ./deploy-git.sh push "${request_options[@]}" --folder=/Accounting
```

GitHubにログインし、リポジトリにワークフローが保存されているのを確認します。

![git.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66557/19c868d6-9605-4dbc-8d23-1bd8e2897014.png)