CVPySDK (Commvault の Developer SDK for Python) について

# はじめに

CVPySDK は Commvault の各種操作を Python から実行するための SDK です。
CVPySDK をインストールすることにより、他の Commvault のモジュールをインストールすることなく Commvault の操作をすることが可能です。

ソース等は https://github.com/Commvault/cvpysdk から参照できます。

# CVPySDK の前提条件

* Python v3 以降
* Python のパッケージ (future、requests および xmltodict)<br>pip で依存コンポーネントとしてインストールされますので、事前に個別でインストールする必要はありません。
* Commvault V11 SP7 以降<br>内部的には Commvault の Web Server に対して REST API を発行しますので、CVPySDK を使用するためには Web Server がセットアップされている必要があります。


# CVPySDK のインストール

CVPySDK は pip からインストールすることが可能です。

```
c:\>pip install cvpysdk
Collecting cvpysdk
  Using cached cvpysdk-11.20-py2.py3-none-any.whl (842 kB)
Collecting future
  Using cached future-0.18.2.tar.gz (829 kB)
Collecting requests
  Using cached requests-2.24.0-py2.py3-none-any.whl (61 kB)
Collecting xmltodict
  Using cached xmltodict-0.12.0-py2.py3-none-any.whl (9.2 kB)
Collecting certifi>=2017.4.17
  Using cached certifi-2020.6.20-py2.py3-none-any.whl (156 kB)
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1
  Using cached urllib3-1.25.10-py2.py3-none-any.whl (127 kB)
Collecting chardet<4,>=3.0.2
  Using cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)
Collecting idna<3,>=2.5
  Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
Using legacy setup.py install for future, since package 'wheel' is not installed.
Installing collected packages: future, certifi, urllib3, chardet, idna, requests, xmltodict, cvpysdk
    Running setup.py install for future ... done
Successfully installed certifi-2020.6.20 chardet-3.0.4 cvpysdk-11.20 future-0.18.2 idna-2.10 requests-2.24.0 urllib3-1.25.10 xmltodict-0.12.0
WARNING: You are using pip version 20.1.1; however, version 20.2.2 is available.
You should consider upgrading via the 'c:\program files\python38\python.exe -m pip install --upgrade pip' command.

c:\>
```

pip list で cvpysdk パッケージがインストールされていることを確認します。

```
c:\>pip list
Package    Version
---------- ---------
certifi    2020.6.20
chardet    3.0.4
cvpysdk    11.20
future     0.18.2
idna       2.10
pip        20.1.1
requests   2.24.0
setuptools 47.1.0
urllib3    1.25.10
xmltodict  0.12.0
WARNING: You are using pip version 20.1.1; however, version 20.2.2 is available.
You should consider upgrading via the 'c:\program files\python38\python.exe -m pip install --upgrade pip' command.

c:\>
```

# CVPySDK による操作

いくつかの操作を試してみます。

Commcell モジュールのインポート

```python
>>> from cvpysdk.commcell import Commcell
>>>
```

ログイン

```python
# ログイン (指定するホスト名は CommServe ホストではなく Web Server ホストです)
>>> commcell = Commcell("webserver_hostname","admin","password")
# ログイン情報の確認
>>> print(commcell)
Commcell class instance of Commcell: "commserve", for User: "admin"
>>>
```

クライアント情報の表示

```python
>>> print(commcell.clients)
S. No.         Client
 
  1     commserve
  2     webserver
```

qcommand の実行 (ジョブ情報の表示 : qlist job)

```python
# qlist job の実行
>>> qcmd = commcell.execute_qcommand("qlist job")
>>>
# 実行結果の表示
>>> print(qcmd.text)
JOBID    OPERATION    STATUS     PHASE             JOB DESCRIPTION    COMPLETE PERCENTAGE
-----    ---------    ------     -----             ---------------    -------------------
598      Backup       Waiting    Backup                               0
600      Backup       Pending    Scan                                 5
778      Aux Copy     Waiting    Auxiliary Copy                       0

>>>
```

スクリプトの実行 (ジョブの実行 qoperation execute)

```python
# スクリプト (C:\scripts\backup01.xml) の読込み
>>> with open("C:\scripts\backup01.xml") as qcmd_file:
...      qcmd_xml = qcmd_file.read()
...
>>>
# qoperation execute の実行
>>> qcmd = commcell.execute_qcommand("qoperation execute", qcmd_xml)
>>>
# 実行結果の表示
>>> import json
>>> qcmd_response = qcmd.json()
>>> print (qcmd_response)
{'taskId': 167, 'jobIds': ['779']}
>>>
# 
```

ログアウト

```python
>>> commcell.logout()
'User logged out'
>>>
```