【指摘事項あり：対応中の為、作業内容は公式ドキュメントをご参考ください】Cloud Pak for Data License Service をインストールしてみた。（Version.4.0.9）

# Cloud Pak for Data License Service をインストールしてみる


## この記事の位置づけ
- データプラットフォームであるCloud Pak for Data(CP4D)のライセンス監査に必要なLicense Service をインストールした手順を記載します。
- [こちらの公式ドキュメント](https://www.ibm.com/docs/en/cloud-paks/cp-data/4.0?topic=tasks-installing-cloud-pak-foundational-services)に則って実施したものですが、もし実際にインストールされる際は、リンク先の公式ドキュメントを参考にしてください。
----
## 前提事項
- CP4D4.0.9 でのインストール手順を実施したものを記載します。
- IBMCloud上のManaged Openshift（ROKS）環境で、ストレージとしてはODF（Openshift Data Foundation）(少し前まではOCS（Openshift Container Storage）と言われていた)を使用しています。
- コマンドを打つ環境としては、Openshiftに対してネットワークで疎通可能なRed Hat Enterprise Linux　を使用しています。
- また監査スナップショットを取得する手元の端末としてはMACを使用しています。
----

## 1.インストール

### 1.1.環境変数の準備
読み込ませた変数はこちら。なおURLやトークン、エンタイトルメントキーなどは適宜マスキングしています。
```
$ cat ./cpd_vars.sh
export OCP_URL=https://XXXXXX.XXXXX.containers.cloud.ibm.com:9999
export OCSERVER=$OCP_URL
export OCTOKEN=sha256~XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
export PROJECT_CPFS_OPS=ibm-common-services
export PROJECT_CPD_OPS=ibm-common-services
export PROJECT_CATSRC=openshift-marketplace
export PROJECT_CPD_INSTANCE=cpd-instance
export STG_CLASS_BLOCK=ocs-storagecluster-ceph-rbd
export STG_CLASS_FILE=ocs-storagecluster-cephfs
export IBM_ENTITLEMENT_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
export VERSION=4.0.9
export OCLOGIN=“oc login --token=$OCTOKEN --server=$OCSERVER”
export CPDOCLOGIN=“cpd-cli manage login-to-ocp --token=$OCTOKEN --server=$OCSERVER”
export PATH=/home/itzuser/.local/bin:/home/itzuser/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/itzuser/cpd/cpd-cli-linux-EE-12.0.0-16
$
```

### 1.2.コマンドによるインストール

以下コマンドでインストールします。
```
$ cat <<EOF |oc apply -f -
> apiVersion: operator.ibm.com/v1alpha1
> kind: OperandRequest
> metadata:
> name: common-service-license
> namespace: ${PROJECT_CPD_INSTANCE}
> spec:
> requests:
> - operands:
>   - name: ibm-licensing-operator
>    bindings:
>     public-api-upload:
>      secret: ibm-licensing-upload-token
>      configmap: ibm-licensing-upload-config
>  registry: common-service
>  registryNamespace: ${PROJECT_CPFS_OPS}
> EOF
operandrequest.operator.ibm.com/common-service-license created
$
```

### 1.3.インストール確認
以下コマンドでインストール状況を確認します。「Installing」と出ているので、この時点ではまだインストール中です。
```
$ oc get opreq common-service-license -n ${PROJECT_CPD_INSTANCE} -o jsonpath=‘{.status.phase} {“\n”}’
Installing 
```

数分待って再度確認します。「Running」と出力されたため、インストールできた事を確認できました。
```
$ oc get opreq common-service-license -n ${PROJECT_CPD_INSTANCE} -o jsonpath=‘{.status.phase} {“\n”}’
Running 
```

Podも以下コマンドで稼働を確認しますが、「Running」と出力されたため、インストールできた事を確認できました。
```
$ oc get pod -n ${PROJECT_CPFS_OPS} -l app.kubernetes.io/name=ibm-licensing -o jsonpath=‘{.items[0].status.phase} {“\n”}’
Running
$
```

## 2.監査スナップショット確認

### 2.1. CP4D にログイン
以下コマンド（環境変数にて設定）を使用してCP4Dにログインします。
```
$ $CPDOCLOGIN
[INFO] 2022-12-23T03:33:50.096399Z Checking architecture: amd64
[INFO] 2022-12-23T03:33:50.096473Z Checking podman or docker
[INFO] 2022-12-23T03:33:50.185531Z Dockerexe: podman
[INFO] 2022-12-23T03:33:50.617339Z Attempting pull container image icr.io/cpopen/cpd/olm-utils:latest
[INFO] 2022-12-23T03:33:56.381969Z Pulling image output: Trying to pull icr.io/cpopen/cpd/olm-utils:latest...
Getting image source signatures
Copying blob sha256:83d998733f83db0660679a9fb555f323ebbb524a9e78024a1d540fb7f5659965
Copying blob sha256:f74bc27dbae06cb58fa7702f3a4e01dbac0369bc76451d0125ea93b28cde9176
Copying blob sha256:8abc860612807800afc77e8631e844c183642c3fd7bf28098329a9a471c51bfa
Copying blob sha256:316692923cf4186703f4822a74e8f95ad046eedd199f12dbc338f668d2236223
Copying blob sha256:0751019658fb1b0335f735a2a3c9858c0d24c286b8e10a71558fc496cafc2822
Copying blob sha256:7dcb9eae8d15826db548a812f5f9b4c0200b2dc70ab396c3d6b31fa856d9c5a6
Copying blob sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef
Copying blob sha256:a45628e3934e07d8bf544c73cd0ab5d9348a36ed7b3f97afeb259bd7ab2ac1e1
Copying blob sha256:e594db1a537b64fb57f4a7b238d851bc64bb3d26a38dbce40276e66c625acf83
Copying blob sha256:206f2f121aef2864956ebab6a7dc01525403e199aff32aaab2a855430e78bba1
Copying blob sha256:7496e1a65b55e7d4d9d8c1dff810ff6b644388dcdf4c225ba0d4b8d0d4f8644b
Copying blob sha256:0e23b3fd0e88bc578d905c3348b080370d574edeb950f9fc09a564ebb2211371
Copying blob sha256:92280228ba11b90a73833edbacdce3e2704ac315aef86a89a563711d59f97ad9
Copying blob sha256:5142e3cece1e41f99e4ea01803ca753c0f86fc43674883246f4128913f626300
Copying blob sha256:e92ca20ec7d658221f16718376ccaf6cc8317c0e127a8d63fe83bc6b666e769a
Copying blob sha256:4e2386fd44f1cc562dc4751c0d1884fae768f585019379cf8419df4ea6fc958f
Copying blob sha256:17a618c36210242c178c5fc8f29b18ec35389e2ae02a41bbbf730ff6d8ad68ea
Copying blob sha256:7d036d2c13decf7587ed2bb7aceac049b2eab6ae5a8af2911dd84687637823ac
Copying blob sha256:8124774be3657eefd13cd7703a91b33b21e4fb8952c6bd74f41194be5ae9aea0
Copying blob sha256:929c76668b3740b4cab1be806382424fbedb942f037866f3845808afdd695c11
Copying blob sha256:fc9f13f6891fc36b6205388df3bd0f784a3b928881bfd1b19109e94c703cec93
Copying blob sha256:55de37c04245d9ab768e59e21213bfb6af6f747ab0856f537fe257a54206bead
Copying blob sha256:02db60fa3b2c1483a42192d374ce4b4a6a19dd11675b79d77fe7d62e72ce39e9
Copying blob sha256:e67e83a38253408947490e8c50dcca6dbc806f77f399ad2ca45d5487f2953e6e
Copying blob sha256:e0ef093f68e1f1603b04fa10dc1eb6d8a5bb1687768473d3e5f0c5ff1d9ab550
Copying config sha256:bca002b0b2ce12cd9747209a86fd845fae7d4a196744a4dc8ce47d4e31d2ba53
Writing manifest to image destination
Storing signatures
bca002b0b2ce12cd9747209a86fd845fae7d4a196744a4dc8ce47d4e31d2ba53
[SUCCESS] 2022-12-23T03:33:56.382145Z Successfully pulled the container image icr.io/cpopen/cpd/olm-utils:latest
[INFO] 2022-12-23T03:33:56.382286Z Delete any existing olm-utils-play container
[INFO] 2022-12-23T03:33:56.697861Z Checking SELinux configuration
[INFO] 2022-12-23T03:33:56.701234Z Start the olm-utils-play container
[INFO] 2022-12-23T03:33:57.322486Z Run command: podman run -d --name olm-utils-play --env CMD_PREFIX=manage -v /home/itzuser/cpd-cli-workspace/olm-utils-workspace/work:/tmp/work icr.io/cpopen/cpd/olm-utils:latest
[INFO] 2022-12-23T03:33:57.323113Z Container is fully ready now
[SUCCESS] 2022-12-23T03:33:57.323170Z Successfully started the container olm-utils-play
[INFO] 2022-12-23T03:33:57.607694Z Processing subcommand login-to-ocp
KUBECONFIG is /opt/ansible/.kubeconfig
W1223 09:33:58.486077  32 loader.go:221] Config not found: /opt/ansible/.kubeconfig
Logged into “https://c100-e.eu-gb.containers.cloud.ibm.com:32403” as “IAM#shumpei.kubo@ibm.com” using the token provided.You have access to 68 projects, the list has been suppressed. You can list all projects with ’oc projects’Using project “default”.
Using project “default” on server “https://c100-e.eu-gb.containers.cloud.ibm.com:32403”.
[SUCCESS] 2022-12-23T03:34:02.955642Z You may find output and logs in the /home/itzuser/cpd-cli-workspace/olm-utils-workspace/work directory.
[SUCCESS] 2022-12-23T03:34:02.955741Z The login-to-ocp command ran successfully.
$
```

### 2.2. 監査スナップショット出力
```
$ cpd-cli manage apply-entitlement \
> --cpd_instance_ns=${PROJECT_CPD_INSTANCE} \
> --entitlement=cpd-enterprise
[INFO] 2022-12-23T03:34:18.219351Z Checking architecture: amd64
[INFO] 2022-12-23T03:34:18.219468Z Checking podman or docker
[INFO] 2022-12-23T03:34:18.309228Z Dockerexe: podman
[INFO] 2022-12-23T03:34:18.536149Z Container olm-utils-play is running already. Image: icr.io/cpopen/cpd/olm-utils:latest
[INFO] 2022-12-23T03:34:18.745729Z Processing subcommand apply-entitlement
--------------------------------------------------
CPD Instance Namespace: cpd-instance
NAME       DATA AGE
product-configmap 49  28d
CPD Instance Id: cfbe4ea0-09bb-4965-8607-260490df2ade
Entitlement: cpd-enterprise
--------------------------------------------------
Applying IBMLicensingDefinition CR’s in Namespace: cpd-instance
ibmlicensingdefinition.operator.ibm.com/service-volumes created
ibmlicensingdefinition.operator.ibm.com/service-ccs created
ibmlicensingdefinition.operator.ibm.com/service-databases created
ibmlicensingdefinition.operator.ibm.com/service-scheduler created
ibmlicensingdefinition.operator.ibm.com/service-cp-open created
ibmlicensingdefinition.operator.ibm.com/service-dmc created
ibmlicensingdefinition.operator.ibm.com/service-bigsql created
ibmlicensingdefinition.operator.ibm.com/service-db2z created
ibmlicensingdefinition.operator.ibm.com/service-dg created
ibmlicensingdefinition.operator.ibm.com/service-hadoop created
ibmlicensingdefinition.operator.ibm.com/service-dv created
ibmlicensingdefinition.operator.ibm.com/service-cde created
ibmlicensingdefinition.operator.ibm.com/service-rshaper created
ibmlicensingdefinition.operator.ibm.com/service-do created
ibmlicensingdefinition.operator.ibm.com/service-spss-modeler created
ibmlicensingdefinition.operator.ibm.com/service-wml created
ibmlicensingdefinition.operator.ibm.com/service-wml-accelerator created
ibmlicensingdefinition.operator.ibm.com/service-aios created
ibmlicensingdefinition.operator.ibm.com/service-ws created
ibmlicensingdefinition.operator.ibm.com/service-wsp created
ibmlicensingdefinition.operator.ibm.com/service-rstudio created
ibmlicensingdefinition.operator.ibm.com/service-spark created
ibmlicensingdefinition.operator.ibm.com/service-dprivacy created
ibmlicensingdefinition.operator.ibm.com/service-wkc created
ibmlicensingdefinition.operator.ibm.com/service-wkc-fact-sheet created
ibmlicensingdefinition.operator.ibm.com/service-mdm created
ibmlicensingdefinition.operator.ibm.com/service-db2wh created
ibmlicensingdefinition.operator.ibm.com/service-db2oltp created
ibmlicensingdefinition.operator.ibm.com/service-datastage created
ibmlicensingdefinition.operator.ibm.com/service-datastage-plus created
ibmlicensingdefinition.operator.ibm.com/service-openpages created
ibmlicensingdefinition.operator.ibm.com/service-pa created
ibmlicensingdefinition.operator.ibm.com/service-cognos-analytics-app created
ibmlicensingdefinition.operator.ibm.com/service-information-server created
ibmlicensingdefinition.operator.ibm.com/service-informix created
ibmlicensingdefinition.operator.ibm.com/service-wd created
ibmlicensingdefinition.operator.ibm.com/service-wa created
ibmlicensingdefinition.operator.ibm.com/service-wapi created
ibmlicensingdefinition.operator.ibm.com/service-wfci created
ibmlicensingdefinition.operator.ibm.com/service-test-data-mgmt created
ibmlicensingdefinition.operator.ibm.com/service-anaconda-rep created
ibmlicensingdefinition.operator.ibm.com/service-fsw created
ibmlicensingdefinition.operator.ibm.com/service-dmp-mongo created
ibmlicensingdefinition.operator.ibm.com/service-dvp created
ibmlicensingdefinition.operator.ibm.com/service-open-data created
--------------------------------------------------
[SUCCESS] 2022-12-23T03:35:05.177060Z You may find output and logs in the /home/itzuser/cpd-cli-workspace/olm-utils-workspace/work directory.
[SUCCESS] 2022-12-23T03:35:05.177240Z The apply-entitlement command ran successfully.
$
```

### 2.3. 監査スナップショット取得

- [こちらの公式ドキュメント](https://www.ibm.com/docs/en/cpfs?topic=pcfls-apis#auditSnapshot)の手順に則り、監査用のスナップショットを取得します。

- OCPの「Administrator」コンソールから、ネットワーク　⇛　ルート、と辿り、lisence で検索。ibm-licensing-service-instance をクリックしたのが以下の画面です。
- その右側の「場所」と書かれているところのURLをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/7d56b634-08ad-1da3-f073-ebc5c7d126a9.png)

- クリックすると以下画面が出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/cff53a12-536a-5b2d-0dfa-8a2f4dc140b7.png)

- 今回は「Snapshot(last 30 days)」を取得してみます。そのリンクをクリックすると、トークンを入力するポップアップが出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/87d058ce-8a20-3578-f2ed-c50091cb49fb.png)


- API TOKENの取得は、こちらのCLIで行います。
- kubectl get secret ibm-licensing-token -o jsonpath={.data.token} -n ibm-common-services | base64 -d

- Tokenを入力すると、zipファイル形式でダウンロードされてきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295123/275b8d59-ac33-e8c2-4be2-68dd67906ed0.png)


- DLされたzipファイルを解凍すると、以下のような感じになります。
- 「audit-ibm」というMACのフォルダ上で以下コマンドを実施しています。

```
 audit_ibm % tar xvf ./audit_snapshot_2022-11-23_2022-12-23_10.242.64.141.zip
x bundled_products_2022-11-23_2022-12-23_10.242.64.141.csv
x products_2022-11-23_2022-12-23_10.242.64.141.csv
x bundled_products_daily_2022-11-23_2022-12-23_10.242.64.141.csv
x products_daily_2022-11-23_2022-12-23_10.242.64.141.csv
x data_condition.txt
x unrecognized-apps-2022-11-23-2022-12-23.csv
x signature.rsa
x pub_key.pem
x checksum.txt
```

- ダウンロードされた内容を確認します。このようなファイル類が入手できるようです。
```
audit_ibm % ls -ltra
total 80
-rw-r--r--@ 1 aa408104 staff  70 12 23 11:23 unrecognized-apps-2022-11-23-2022-12-23.csv
-rw-r--r--@ 1 aa408104 staff 256 12 23 11:23 signature.rsa
-rw-r--r--@ 1 aa408104 staff 445 12 23 11:23 pub_key.pem
-rw-r--r--@ 1 aa408104 staff 286 12 23 11:23 products_daily_2022-11-23_2022-12-23_10.242.64.141.csv
-rw-r--r--@ 1 aa408104 staff 258 12 23 11:23 products_2022-11-23_2022-12-23_10.242.64.141.csv
-rw-r--r--@ 1 aa408104 staff 2441 12 23 11:23 data_condition.txt
-rw-r--r--@ 1 aa408104 staff 682 12 23 11:23 checksum.txt
-rw-r--r--@ 1 aa408104 staff 591 12 23 11:23 bundled_products_daily_2022-11-23_2022-12-23_10.242.64.141.csv
-rw-r--r--@ 1 aa408104 staff 481 12 23 11:23 bundled_products_2022-11-23_2022-12-23_10.242.64.141.csv
-rw-r--r--@ 1 aa408104 staff 3985 12 23 20:23 audit_snapshot_2022-11-23_2022-12-23_10.242.64.141.zip
drwx------@ 815 aa408104 staff 26080 12 23 20:31 ..
drwxr-xr-x 12 aa408104 staff 384 12 23 20:32 .
audit_ibm %
```