Oracle Clusterware用のREST APIを使ってみる
この記事は、 JPOUG Advent Calendar 2021 11日目の記事です。
10日目は Kenichi Mihara さんの記事『日本の電子政府はなぜイマイチなのか | サイクル&オラクル』でした。
はじめに
REST APIはなんとなく知っているが実際には使ったことはない状態でした。
21cのClusterwareで使えるようになったことで、次のLTSバージョンに向けて一度使ってみようと重い腰を上げてみました。
Clusterware管理およびデプロイメント・ガイドからOracle Clusterware用のREST APIをベースにやっていきます。
こちらの内容は2021/12時点で以下の環境で実行したものとなります。
環境
Oracle Grid Infrastructure 21c(21.0.0.0.0)
忙しい人向けサマリ
- REST APIにアクセスするユーザのパスワードは
/u01/app/21.0.0/grid/bin/cdpc config
で確認できる。 CDPのログはgridのalertログと同じディレクトリ
/u01/app/grid/diag/crs/db2101/crs/trace/crscdpd_*.trc
外部からのアクセスは自セグメント(今回は/24)はデフォルトで許可されている。多分ホストのサブネットマスクで/24部分は変わりそう。
- ファイルが出力されるジョブは、ジョブステータスがCompletedになってからダウンロードする。
- REST APIのジョブはjobExpiryで削除される。
- Gridに関係ないコマンドは実行できない。
初期設定関連
初期パスワードの確認
初めから横道に逸れます。引越しの荷造り中にマンガ読んでしまって進まない系のやつです。
マニュアルの始まりはadminユーザのパスワード変更から始まっており、初期パスワードをどうしても確認したくなりました。
gridのalert.log
MySQL?みたいにパスワードがログに出力されていないかなと思い、gridのalert.logをおもむろにgrep -i cdpをしてみます。
[grid@db2101 ~]$ cd $ORACLE_BASE/diag/crs/db2101/crs/trace/ [grid@db2101 trace]$ grep -i cdp alert.log [grid@db2101 trace]$
はずれでした。
gridインストールログ
ならばということで、次を見ていきます。インストールログはインベントリ/u01/app/oraInventory/logs/
の下になりますね。
[grid@db2101 ~]$ cd /u01/app/oraInventory/logs/GridSetupActions2021-09-24_00-51-40AM [grid@db2101 GridSetupActions2021-09-24_00-51-40AM]$ [grid@db2101 GridSetupActions2021-09-24_00-51-40AM]$ grep -i cdp gridSetupActions2021-09-24_00-51-40AM.out ・・・(略)・・・ [pool-1-thread-1] [ 2021-09-24 01:05:37.141 JST ] [FDOwnershipPermissionsConstraintsParser.processLine:299] Skipping - OS OR Context applicability flag is false for path [${CONFIGURED_CRS_HOME}/crs/install/oracdp.pm] with constraints [FIXABLE]
途中にも怪しいファイルはありましたが、一番下にそれっぽいPerlファイルがあるので見てみます。
[grid@db2101 ~]$ cd /u01/app/21.0.0/grid/crs/install [grid@db2101 install]$ view oracdp.pm ・・・(略)・・・ 868 my $CDPC_BIN = catfile ($CFG->ORA_CRS_HOME, "bin", "cdpc"); 869 my $CRSCDPD_BIN = catfile ($CFG->ORA_CRS_HOME, "bin", "crscdpd"); 870 871 # Fetch current passwords 872 @runcmd = ("$CDPC_BIN", "config"); 873 $status = run_as_user2($crsusr, \@output, @runcmd); 874 if (0 != $status) 875 { 876 print_trace_lines(@output); 877 return FAILED; 878 } 879 880 foreach my $line (@output) 881 { 882 if ($line =~ m/ admin:(.+) wallet/) 883 { 884 $apass = $1; 885 }
842行目付近からmodifyCDPという関数があります。871行目でFetch current passwordsとあるため、前後の処理を見て何となく実行すべきコマンドがわかった気がします。
[grid@db2101 ~]$ cd /u01/app/21.0.0/grid/bin [grid@db2101 bin]$ ./cdpc config Resource 'ora.cdp' has 3 cred members [0] admin:<xxxxxxxxxx> wallet 4885 wpass FALSE url https://scan21:5700/grid/cdp/v1/cdp fqdn scan21 entity id ora.cdp cluster id 650c3bacf1645fa9ff5d80db17ca133a [1] readonly:<xxxxxxxxxx> wallet 4885 wpass FALSE url https://scan21:5700/grid/cdp/v1/cdp fqdn scan21 entity id ora.cdp cluster id 650c3bacf1645fa9ff5d80db17ca133a [2] events:<xxxxxxxxxx> wallet 4885 wpass FALSE url https://scan21:5700/grid/cdp/v1/cdp fqdn scan21 entity id ora.cdp cluster id 650c3bacf1645fa9ff5d80db17ca133a [grid@db2101 bin]$
環境毎にパスワードは違うと思いますが、念のためマスクしました。上記の通りしっかりパスワードが見えました。
答え合わせということでマニュアルにある例J-1 すべてのホームのリストの取得
を実行してみます。
[grid@db2101 ~]$ curl -k -X GET https://scan21.snet.com:5700/grid/cmd/v1/cmd/ \ > --user 'admin:<xxxxxxxxxx>' | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1078 100 1078 0 0 5417 0 --:--:-- --:--:-- --:--:-- 5417 { "name": "cmd", "homes": [ { "homeName": "OraGI21Home1", "path": "/u01/app/21.0.0/grid" }, { "homeName": "OraDB21Home1", "path": "/u01/app/oracle/product/21.0.0/dbhome_1" }, ・・・(略)・・・
結果はjsonで返ってくるため、見やすくするためjqコマンドへパイプしました。
パスワードにバッククォートが含まれていたため、シングルクォートで囲っています。
同じくreadonlyユーザも、実行可能でした。
eventsユーザはエラーにはなりませんがレスポンスが返ってきませんでした。パスワード変更自体出来ないため、特別なユーザなんだと思います。
パスワード変更
gridユーザでは権限がなく実行できないため、rootユーザで実行します。
[root@db2101 ~]$ /u01/app/21.0.0/grid/bin/srvctl stop cdp [root@db2101 ~]$ echo 'myAdminPasswd' > /tmp/adminpasswd [root@db2101 ~]# /u01/app/21.0.0/grid/bin/srvctl modify cdp -passfile_admin /tmp /adminpasswd [root@db2101 ~]# echo $? 0 [root@db2101 ~]# /u01/app/21.0.0/grid/bin/srvctl start cdp
再度gridユーザでパスワード確認/u01/app/21.0.0/grid/bin/cdpc config
を実行するとadminユーザのパスワードが変わったことを確認できました。
CDPログの確認
grid alertログのディレクトリでgrep -i cdp *
をしました。
cdpごとにファイルがあり、世代管理されているようです。アクセスされたAPIなど確認できました。
[root@db2101 ~]# cd /u01/app/grid/diag/crs/db2101/crs/trace [root@db2101 trace]# ls Display all 2515 possibilities? (y or n) [root@db2101 trace]# ll crscdpd* -rw-rw---- 1 grid oinstall 3994759 12月 5 13:21 crscdpd_1.trc -rw-rw---- 1 grid oinstall 531105 12月 5 13:21 crscdpd_1.trm -rw-rw---- 1 grid oinstall 26215016 11月 28 20:17 crscdpd_1_1.trc -rw-rw---- 1 grid oinstall 3502971 11月 28 20:17 crscdpd_1_1.trm -rw-rw---- 1 grid oinstall 26215042 12月 4 15:47 crscdpd_1_2.trc -rw-rw---- 1 grid oinstall 3583867 12月 4 15:47 crscdpd_1_2.trm -rw-rw---- 1 grid oinstall 3873257 12月 5 13:21 crscdpd_2.trc -rw-rw---- 1 grid oinstall 515200 12月 5 13:21 crscdpd_2.trm -rw-rw---- 1 grid oinstall 26215265 11月 28 20:44 crscdpd_2_1.trc -rw-rw---- 1 grid oinstall 3492527 11月 28 20:44 crscdpd_2_1.trm -rw-rw---- 1 grid oinstall 26214967 12月 4 16:21 crscdpd_2_2.trc -rw-rw---- 1 grid oinstall 3577549 12月 4 16:21 crscdpd_2_2.trm -rw-rw---- 1 grid oinstall 379406 12月 4 15:21 crscdpd_3.trc -rw-rw---- 1 grid oinstall 80512 12月 4 15:21 crscdpd_3.trm
クラスタ外部からの接続許可について
まずは初期状態を確認します。
[grid@db2101 ~]$ srvctl config cdp ------------------------------------------------------- CDP名 ポート 許可されるIP ------------------------------------------------------- ora.cdp1.cdp 5700 ora.cdp2.cdp 5700 ora.cdp3.cdp 5700
接続許可 gridユーザではエラーとなるため、rootユーザで実行します。
[root@db2101 bin]# /u01/app/21.0.0/grid/bin/srvctl modify cdp -allow "172.16.2.19/32" [root@db2101 bin]# /u01/app/21.0.0/grid/bin/srvctl config cdp ------------------------------------------------------- CDP名 ポート 許可されるIP ------------------------------------------------------- ora.cdp1.cdp 5700 172.16.2.19/32 ora.cdp2.cdp 5700 172.16.2.19/32 ora.cdp3.cdp 5700 172.16.2.19/32
設定時のログ
2021-12-05 14:13:49.081 : CLSWS:140394522236672: clsws_cli_event: got allowips event 172.16.2.19/32 2021-12-05 14:13:49.081 : CLSWS:140394520135424: clsws_cli_allow_thr: Subnet Mask IP 172.16.2.0/255.255.255.0 converted to CIDR 172.16.2.0/24 2021-12-05 14:13:49.081 : CLSWS:140394520135424: clsws_cli_allow_thr: allowed ip from attr: '172.16.2.0/24' 2021-12-05 14:13:49.081 : CLSWS:140394520135424: clsws_cli_allow_thr: allowed ip from attr: '172.16.2.19/32' 2021-12-05 14:13:53.238 : CLSWS:140394515932928: clsws_cli_status_thr: loop counter 0 cur_len 0
ログを見ていると、広い172.16.2.0/24でも許可されていることが確認できます。172.16.2.19は今回のOracleRACと同じセグメント(172.16.2.0/24)になります。
マニュアルには以下のように書かれていますが、現状はクラスタと同セグ/24は許可リストに初めから入っているようです。
デフォルトでREST APIを安全にするために、クラスタ内のノードのIPアドレス以外からのすべてのリクエストが拒否されます。CDPデーモンはクラスタ内のノードを監視し、IPのいずれとも一致しないCLIエンドポイントへのリクエストをすべて拒否します。
試しに/u01/app/21.0.0/grid/bin/srvctl modify cdp -allow ""
のように空で実行するとやはり、クラスタと同セグ/24は許可リストのようです。
2021-12-05 14:17:58.378 : CLSWS:140394522236672: clsws_cli_event: got allowips event 2021-12-05 14:17:58.378 : CLSWS:140394520135424: clsws_cli_allow_thr: Subnet Mask IP 172.16.2.0/255.255.255.0 converted to CIDR 172.16.2.0/24 2021-12-05 14:17:58.378 : CLSWS:140394520135424: clsws_cli_allow_thr: allowed ip from attr: '172.16.2.0/24'
実は許可設定前に、アクセスできないねっていうログを取りたかったのですが、接続できてしまいログを読んだところこのような結末でした。
REST APIを使ってみる
前置きは長くなりましたが、マニュアルを見ながら進めていきます。
ジョブ実行
レスポンスもjsonなので、jqで見やすくしています。
これはマニュアルの例J-2 ジョブの作成(crsctl)およびステータスの監視
になります。
[root@dev01 ~]# curl -k -X POST \ > https://172.16.2.57:5700/grid/cmd/v1/cmd/exec \ > '-H "accept: text/plain,text/javascript,application/json"' \ > '-H "content-type: application/vnd.oracle.resource+json;type=singular"' \ > --user admin:myAdminPasswd \ > '-d {"command" : ["crsctl", "stat", "res", "-t"], "runAsUser":"grid", "userPassword":"grid"}' | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 680 100 590 100 90 129 19 0:00:04 0:00:04 --:--:-- 134 { "runAsUser": "grid", "jobId": "oPSnBD_T0hJk7pMo7vswEsry4LKM4zmFFdMBTMl0xQlAG5-jMr3UwAcU_tsZWlL4shtB8ibgEG9LtM9EXmD2uw", "command": [ "crsctl", "stat", "res", "-t" ], "nodeName": "db2101", "jobExpiry": 3600, "status": "Scheduled", "links": [ { "rel": "canonical", "href": "https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs/oPSnBD_T0hJk7pMo7vswEsry4LKM4zmFFdMBTMl0xQlAG5-jMr3UwAcU_tsZWlL4shtB8ibgEG9LtM9EXmD2uw", "mediaType": "application/vnd.oracle.resource+json;type=singular" }, { "rel": "parent", "href": "https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs", "mediaType": "application/vnd.oracle.resource+json;type=collection" } ] }
コマンドの実行結果が1行で出力されるので、どうするか考えたいですね。
何となくjobIdは数値で連番みたいな想像を勝手にしていたので、若干面を食らいました。
[root@dev01 ~]# curl -k -X GET https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs/oPSnBD_T0hJk7pMo7vswEsry4LKM4zmFFdMBTMl0xQlAG5-jMr3UwAcU_tsZWlL4shtB8ibgEG9LtM9EXmD2uw --user admin:myAdminPasswd | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 5595 100 5595 0 0 20825 0 --:--:-- --:--:-- --:--:-- 20799 { "runAsUser": "grid", "jobId": "oPSnBD_T0hJk7pMo7vswEsry4LKM4zmFFdMBTMl0xQlAG5-jMr3UwAcU_tsZWlL4shtB8ibgEG9LtM9EXmD2uw", "command": [ "crsctl", "stat", "res", "-t" ], "nodeName": "db2101", "output": "--------------------------------------------------------------------------------\nName Target State Server State details \n--------------------------------------------------------------------------------\nLocal Resources\n--------------------------------------------------------------------------------\nora.LISTENER.lsnr\n ONLINE ONLINE db2101 STABLE\n ONLINE ONLINE db2102 STABLE\nora.chad\n ONLINE ONLINE db2101 STABLE\n ONLINE ONLINE db2102 STABLE\nora.helper\n OFFLINE OFFLINE db2101 IDLE,STABLE\n OFFLINE OFFLINE db2102 IDLE,STABLE\nora.net1.network\n ONLINE ONLINE db2101 STABLE\n ONLINE ONLINE db2102 STABLE\nora.ons\n ONLINE ONLINE db2101 STABLE\n ONLINE ONLINE db2102 STABLE\n--------------------------------------------------------------------------------\nCluster Resources\n--------------------------------------------------------------------------------\nora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)\n 1 ONLINE ONLINE db2101 STABLE\n 2 ONLINE ONLINE db2102 STABLE\nora.ASMNET2LSNR_ASM.lsnr(ora.asmgroup)\n 1 ONLINE ONLINE db2101 STABLE\n 2 ONLINE ONLINE db2102 STABLE\nora.DATA.dg(ora.asmgroup)\n 1 ONLINE ONLINE db2101 STABLE\n 2 ONLINE ONLINE db2102 STABLE\nora.LISTENER_SCAN1.lsnr\n 1 ONLINE ONLINE db2101 STABLE\nora.LISTENER_SCAN2.lsnr\n 1 ONLINE ONLINE db2101 STABLE\nora.LISTENER_SCAN3.lsnr\n 1 ONLINE ONLINE db2102 STABLE\nora.MGMT.dg(ora.asmgroup)\n 1 ONLINE ONLINE db2101 STABLE\n 2 ONLINE ONLINE db2102 STABLE\nora.MGMTLSNR\n 1 ONLINE ONLINE db2101 169.254.8.36 10.10.1\n .1 10.10.2.1,STABLE\nora.OCR.dg(ora.asmgroup)\n 1 ONLINE ONLINE db2101 STABLE\n 2 ONLINE ONLINE db2102 STABLE\nora.asm(ora.asmgroup)\n 1 ONLINE ONLINE db2101 Started,STABLE\n 2 ONLINE ONLINE db2102 Started,STABLE\nora.asmnet1.asmnetwork(ora.asmgroup)\n 1 ONLINE ONLINE db2101 STABLE\n 2 ONLINE ONLINE db2102 STABLE\nora.asmnet2.asmnetwork(ora.asmgroup)\n 1 ONLINE ONLINE db2101 STABLE\n 2 ONLINE ONLINE db2102 STABLE\nora.cdp1.cdp\n 1 ONLINE ONLINE db2101 STABLE\nora.cdp2.cdp\n 1 ONLINE ONLINE db2101 STABLE\nora.cdp3.cdp\n 1 ONLINE ONLINE db2102 STABLE\nora.cvu\n 1 ONLINE ONLINE db2101 STABLE\nora.db2101.vip\n 1 ONLINE ONLINE db2101 STABLE\nora.db2102.vip\n 1 ONLINE ONLINE db2102 STABLE\nora.mgmtdb\n 1 ONLINE ONLINE db2101 Open,STABLE\nora.orcl.db\n 1 ONLINE ONLINE db2101 Open,HOME=/u01/app/o\n racle/product/21.0.0\n /dbhome_1,STABLE\n 2 ONLINE ONLINE db2102 Open,HOME=/u01/app/o\n racle/product/21.0.0\n /dbhome_1,STABLE\nora.orcl.orclpdb1.pdb\n 1 ONLINE ONLINE db2101 STABLE\n 2 ONLINE ONLINE db2102 STABLE\nora.qosmserver\n 1 ONLINE ONLINE db2101 STABLE\nora.rhpserver\n 1 OFFLINE OFFLINE STABLE\nora.scan1.vip\n 1 ONLINE ONLINE db2101 STABLE\nora.scan2.vip\n 1 ONLINE ONLINE db2101 STABLE\nora.scan3.vip\n 1 ONLINE ONLINE db2102 STABLE\n--------------------------------------------------------------------------------\n", "processId": 829488, "processStatus": 0, "timeStart": "2021-12-05T08:03:46", "timeFinish": "2021-12-05T08:03:47", "jobExpiry": 3600, "status": "Completed", "links": [ { "rel": "canonical", "href": "https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs/oPSnBD_T0hJk7pMo7vswEsry4LKM4zmFFdMBTMl0xQlAG5-jMr3UwAcU_tsZWlL4shtB8ibgEG9LtM9EXmD2uw", "mediaType": "application/vnd.oracle.resource+json;type=singular" }, { "rel": "parent", "href": "https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs", "mediaType": "application/vnd.oracle.resource+json;type=collection" } ] }
CVUジョブ出力ファイルの取得
cluvfy comp healthcheck
コマンドは実行に時間がかかるため、ジョブステータスがCompletedになったのを確認してからダウンロードしましょう。
CDPログを1つだけ見るようにしたいためIP指定にしています。
またそれに伴い証明書の警告がでたため--no-check-certificate
をつけています。
[root@dev01 ~]# wget --user admin --password myAdminPasswd https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs/C_GzD1MMhg0h4U9DmKUElRXmcUsYVio6Mq3tPcTEG2sQn-nKWcj9rOACAuU7dlDbzagdhZrdt-bxts7ci79yIQ/outputFile --no-check-certificate --2021-12-05 16:07:40-- https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs/C_GzD1MMhg0h4U9DmKUElRXmcUsYVio6Mq3tPcTEG2sQn-nKWcj9rOACAuU7dlDbzagdhZrdt-bxts7ci79yIQ/outputFile Connecting to 172.16.2.57:5700... connected. WARNING: cannot verify 172.16.2.57's certificate, issued by ‘/O=Oracle_Clusterware/CN=650c3bacf1645fa9ff5d80db17ca133a_1632413658’: Self-signed certificate encountered. WARNING: certificate common name ‘scan21’ doesn't match requested host name ‘172.16.2.57’. HTTP request sent, awaiting response... 401 Unauthorized Reusing existing connection to 172.16.2.57:5700. HTTP request sent, awaiting response... No data received. Retrying. --2021-12-05 16:07:41-- (try: 2) https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs/C_GzD1MMhg0h4U9DmKUElRXmcUsYVio6Mq3tPcTEG2sQn-nKWcj9rOACAuU7dlDbzagdhZrdt-bxts7ci79yIQ/outputFile Connecting to 172.16.2.57:5700... connected. WARNING: cannot verify 172.16.2.57's certificate, issued by ‘/O=Oracle_Clusterware/CN=650c3bacf1645fa9ff5d80db17ca133a_1632413658’: Self-signed certificate encountered. WARNING: certificate common name ‘scan21’ doesn't match requested host name ‘172.16.2.57’. HTTP request sent, awaiting response... 200 OK Length: 187724 (183K) [application/file] Saving to: ‘outputFile’ 100%[===============================================================>] 187,724 --.-K/s in 0.004s 2021-12-05 16:07:41 (42.6 MB/s) - ‘outputFile’ saved [187724/187724]
また、ジョブのステータスチェックをした際に、jsonの中にoutputFileName
というキーがありました。
valueにファイル名があったため、find検索したところ/u01/app/grid/crsdata/db2101/clswscli
に一時ファイルが保存されているようでした。
ジョブの削除と削除確認
ここはあまり、特筆する点がありません。
ジョブのステータスを確認するとjobExpiry
という項目があり3600と設定があります。1時間でジョブが削除されているようでした。
例J-4 ステータスの監視、ジョブ出力の取得およびCVUジョブ出力ファイルの取得
では、"jobExpiry":300としており、実際に実行すると300で設定されていました。
すべてのジョブステータスを表示する。
将来の自分のために、サンプルとして例J-5 すべてのジョブのステータスの監視
の出力例を残します。
[root@dev01 ~]# curl -k -X GET https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs/ --user 'admin:myAdminPasswd' | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1800 100 1800 0 0 1432 0 0:00:01 0:00:01 --:--:-- 1433 { "items": [ { "runAsUser": "grid", "jobId": "C_GzD1MMhg0h4U9DmKUElRXmcUsYVio6Mq3tPcTEG2sQn-nKWcj9rOACAuU7dlDbzagdhZrdt-bxts7ci79yIQ", "command": [ "cluvfy", "comp", "healthcheck" ], "nodeName": "db2101", "output": "STATUS=OPERATION_FAILED\nREPORT=/grid/cmd/v1/cmd/jobs/C_GzD1MMhg0h4U9DmKUElRXmcUsYVio6Mq3tPcTEG2sQn-nKWcj9rOACAuU7dlDbzagdhZrdt-bxts7ci79yIQ/outputFile\n", "outputFile": [ { "rel": "canonical", "href": "https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs/jobs/C_GzD1MMhg0h4U9DmKUElRXmcUsYVio6Mq3tPcTEG2sQn-nKWcj9rOACAuU7dlDbzagdhZrdt-bxts7ci79yIQ", "mediaType": "application/file" }, { "rel": "parent", "href": "https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs/jobs/C_GzD1MMhg0h4U9DmKUElRXmcUsYVio6Mq3tPcTEG2sQn-nKWcj9rOACAuU7dlDbzagdhZrdt-bxts7ci79yIQ/outputFile", "mediaType": "application/vnd.oracle.resource+json;type=singular" } ], "outputFileName": "C_GzD1MMhg0h4U9DmKUElRXmcUsYVio6Mq3tPcTEG2sQn-nKWcj9rOACAuU7dlDbzagdhZrdt-bxts7ci79yIQ_outputfile.txt", "preferredFileName": "cvureport_2021-12-05_15-32-16.txt", "processId": 776738, "processStatus": 0, "timeStart": "2021-12-05T06:32:16", "timeFinish": "2021-12-05T06:36:27", "jobExpiry": 3600, "status": "Completed", "links": [ { "rel": "canonical", "href": "https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs/jobs/C_GzD1MMhg0h4U9DmKUElRXmcUsYVio6Mq3tPcTEG2sQn-nKWcj9rOACAuU7dlDbzagdhZrdt-bxts7ci79yIQ", "mediaType": "application/vnd.oracle.resource+json;type=singular" }, { "rel": "parent", "href": "https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs/jobs", "mediaType": "application/vnd.oracle.resource+json;type=collection" } ] }, { "runAsUser": "grid", "jobId": "QRktJp4Q8648q8C8hbwnjUEqAY1VmYMiX-D8SsaznwPfYy8XOih2_sxgwxpnZpFytpH_IbZDi-1GAUf4KsWfbg", "command": [ "srvctl", "config", "cdp" ], "nodeName": "db2101", "output": "-------------------------------------------------------\nCDP Name port allowed ips\n-------------------------------------------------------\nora.cdp1.cdp 5700 \nora.cdp2.cdp 5700 \nora.cdp3.cdp 5700 \n", "processId": 828657, "processStatus": 0, "timeStart": "2021-12-05T08:01:48", "timeFinish": "2021-12-05T08:01:49", "jobExpiry": 3600, "status": "Completed", "links": [ { "rel": "canonical", "href": "https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs/jobs/QRktJp4Q8648q8C8hbwnjUEqAY1VmYMiX-D8SsaznwPfYy8XOih2_sxgwxpnZpFytpH_IbZDi-1GAUf4KsWfbg", "mediaType": "application/vnd.oracle.resource+json;type=singular" }, { "rel": "parent", "href": "https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs/jobs", "mediaType": "application/vnd.oracle.resource+json;type=collection" } ] } ], "links": [ { "rel": "canonical", "href": "https://172.16.2.57:5700/grid/cmd/v1/cmd/jobs", "mediaType": "application/vnd.oracle.resource+json;type=collection" }, { "rel": "parent", "href": "https://172.16.2.57:5700/grid/cmd/v1/cmd", "mediaType": "application/vnd.oracle.resource+json;type=singular" } ] }
自作コマンドのジョブを実行できるのか
ふと思い、ファイルを用意して実行してみました。
[root@db2101 ~]# ll /tmp/get_os_info.sh -rwxr--r-- 1 root root 300 12月 5 16:19 /tmp/get_os_info.sh [root@db2101 ~]# [root@db2101 ~]# cat /tmp/get_os_info.sh #!/bin/bash ip a | grep inet df -hT exit 0
おもむろに実行してみます。
[root@dev01 ~]# curl -k -X POST \ > https://172.16.2.57:5700/grid/cmd/v1/cmd/exec \ > '-H "accept: text/plain,text/javascript,application/json"' \ > '-H "content-type: application/vnd.oracle.resource+json;type=singular"' \ > --user admin:myAdminPasswd \ > '-d {"command" : ["sh", "/tmp/get_os_info.sh"], "runAsUser":"root", "userPassword":"P@ssw0rd"}' [root@dev01 ~]#
レスポンスが返ってこないし、ジョブ一覧にも表示されない。
ログをみるとinvalid exec request
と言われ実行できないようです。
若干期待しましたが、ですよねという感じです。
2021-12-05 16:31:21.803 : CLSWS:140394539046656: clswsd_wl_check_auth returns 1 2021-12-05 16:31:21.803 : CLSWS:140394539046656: calling clsws_cli_exec for uri /grid/cmd/v1/cmd/exec qs <null> op POST 2021-12-05 16:31:21.803 : CLSWS:140394539046656: clsws_cli_job_parse: Invalid CLI passed sh 2021-12-05 16:31:21.803 : CLSWS:140394539046656: clsws_cli_exec: invalid exec request 2021-12-05 16:31:21.803 : CLSWS:140394539046656: Result 400 BAD_REQ for uri /grid/cmd/v1/cmd/exec op POST 2021-12-05 16:31:21.804 : CLSWS:140394528540416: Closing connection w/conndata 0x7fb008037380
まとめ
細かいところは押さえられていませんが、大枠について知ることができた感じがします。
実施前まで少し心配でしたが、思いのほか簡単に実行できました。
今後のために何かに使えるか考えてみようと思います。
今になってorachkなど実行できるか試してみたくなったので、追って実施しようと思います。