21.1 サンプルコードの概要
サンプルコードの構成要素
サンプルコードでは、次の操作を実行します。
- ストレージシステムの情報登録
REST APIでストレージシステムのリソースを操作するために、対象のストレージシステムの情報をREST APIサーバに登録します。
ストレージシステム登録時に必要なパラメータは、ストレージシステムごとに異なります。登録するストレージシステムに合わせて、次のファイルに定義されているパラメータの値を見直してください。
- block_storage_api.py
- storage_param.py
詳細については、ストレージシステムの情報登録のサンプルコードの説明、およびサンプルコードで使用している関数の説明を参照してください。
- ボリューム割り当て
作成済みのHDPプールからHDPボリュームを作成し、アクセスできるようにホストに割り当てます。
- ShadowImageペア操作
作成済みのボリュームを使用してShadowImageペアを作成します。そのペアを分割したあと、ペアの状態を確認します。
- リモートストレージシステムの情報登録
リモートストレージシステムの情報をローカルストレージシステム側のREST APIサーバに登録します。リモートコピー操作の前提となる操作です。
- TrueCopy ペア操作
作成済みのボリュームを使用してTrueCopy ペアを作成し、ペアの状態を確認します。ペアの作成はリソースグループをロックして行います。
- ファイルアップロード(監査ログ転送先設定)
ストレージシステムの監査ログをsyslogサーバに転送するように設定します。このサンプルコードには、クライアント証明書をストレージシステムにアップロードする手順があります。このサンプルコードは、VSP 5000 シリーズ、VSP E シリーズ、VSP Gx00 モデル、VSP Fx00 モデルのストレージシステムが対象です。
- ファイルダウンロード(暗号化鍵バックアップ)
暗号化鍵をREST APIクライアントでバックアップします。このサンプルコードには、暗号化鍵バックアップファイルをクライアントにダウンロードする手順があります。このサンプルコードは、VSP E シリーズ、VSP G150、G350、G370、G700、G900、VSP F350、F370、F700、F900のストレージシステムが対象です。
- パリティグループ再作成(データの暗号化)
既存のパリティグループを削除して、暗号化の設定が有効の新しいパリティグループを作成します。この操作は、ドライブの構成を変更しないで既存のデータを暗号化する操作の流れの中で行う手順の一部です。全体の手順については、データ暗号化の操作の流れの説明を参照してください。このサンプルコードは、VSP E シリーズ、VSP G150、G350、G370、G700、G900、VSP F350、F370、F700、F900のストレージシステムが対象です。
上記の操作には、次のようなコードの構成要素が含まれます。
- REST APIを呼び出す前に実行する処理
- JSON形式によるリクエストボディの生成
- フォームデータの作成
- リクエストヘッダの指定(既定のHTTPヘッダの場合、カスタムHTTPヘッダの場合)
- ユーザ認証情報の設定(ユーザIDとパスワードによる認証の場合、セッションベースの認証の場合)
- リソースのURL取得(オブジェクトIDを指定しない場合、操作結果から取得したオブジェクトIDを指定する場合、単一インスタンスなどの固定のオブジェクトIDを指定する場合)
- REST APIを呼び出す処理
- GET操作によるREST APIバージョン情報の取得
- GET操作によるオブジェクトの取得(特定のオブジェクトを取得する場合)
- GET操作によるオブジェクトの取得(情報検索で取得する場合)
- GET操作による Action テンプレートの取得
- PUT操作によるオブジェクトの属性変更
- PUT操作によるAction テンプレートを使用したアクションの実行
- PUT操作によるオブジェクトに対するアクションの実行
- PUT操作によるサービスのアクションの実行
- POST操作によるオブジェクトの新規作成
- POST操作によるオブジェクトに対するアクションの実行
- 複数装置でのセッション生成を必要とする操作(リモートコピー操作)
- DELETE操作によるオブジェクトの削除
- REST APIを呼び出したあとに実行する処理
- 取得した情報の出力
- ジョブの実行結果の取得
- 操作結果が反映されたリソースのURL取得
- エラーコードの取得
- エラーメッセージの出力
コードの構成要素 |
サンプルコードでの使用例 |
対応するサンプルコード |
---|---|---|
JSON形式によるリクエストボディの生成 |
HTTPリクエストの発行と非同期処理の状態確認のための関数の定義 |
ボリューム割り当て ShadowImageペア操作 |
HDPボリュームの作成 |
ボリューム割り当て |
|
ShadowImageペアの作成 |
ShadowImageペア操作 |
|
フォームデータの作成 |
転送先syslogサーバのルート証明書のアップロード 転送先syslogサーバのクライアント証明書のアップロード |
ファイルアップロード(監査ログ転送先設定) |
リクエストヘッダの指定(既定のHTTPヘッダの場合) |
ヘッダの定義 |
ボリューム割り当て ShadowImageペア操作 リモートストレージシステムの情報登録 TrueCopy ペア操作 |
リクエストヘッダの指定(カスタムHTTPヘッダの場合) |
ヘッダの定義 |
ShadowImageペア操作 |
ユーザ認証情報の設定(ユーザIDとパスワードによる認証の場合) |
セッションの生成 |
ボリューム割り当て ShadowImageペア操作 リモートストレージシステムの情報登録 TrueCopyペア操作 |
ユーザ認証情報の設定(セッションベースの認証の場合) |
HTTPリクエストの発行と非同期処理の状態確認のための関数の定義 |
ボリューム割り当て ShadowImageペア操作 |
HDPボリュームの作成 |
ボリューム割り当て |
|
ShadowImageペアの分割 |
ShadowImageペア操作 |
|
リソースのURL取得(オブジェクトIDを指定しない場合) |
HDPボリュームの作成(BlockStorageAPI.ldevs) |
ボリューム割り当て |
ホストグループの作成(BlockStorageAPI.host_groups) |
ボリューム割り当て |
|
ShadowImageペアの作成 (BlockStorageAPI.local_copy_pairs) |
ShadowImageペア操作 |
|
リソースのURL取得(操作結果から取得したオブジェクトIDを指定する場合) |
ホストグループの作成(BlockStorageAPI.affected_resource) |
ボリューム割り当て |
ShadowImageペアの作成 (BlockStorageAPI.affected_resource) |
ShadowImageペア操作 |
|
リソースのURL取得(単一インスタンスなどの固定のオブジェクトIDを指定する場合) |
転送先syslogサーバの設定(BlockStorageAPI.auditlog_syslog) 転送先syslogサーバへのテストメッセージ送信(BlockStorageAPI.auditlog_syslog_send_test) |
ファイルアップロード(監査ログ転送先設定) |
暗号化鍵バックアップファイルのダウンロード(BlockStorageAPI.encryption_key_file_backup) |
ファイルダウンロード(暗号化鍵バックアップ) |
|
GET操作によるREST APIバージョン情報の取得 |
REST APIのバージョンの確認(BlockStorageAPI.api_version) |
ボリューム割り当て ShadowImageペア操作 リモートストレージシステムの情報登録 TrueCopyペア操作 |
GET操作によるオブジェクトの取得(特定のオブジェクトを取得する場合) |
HDPボリュームの情報取得(BlockStorageAPI.ldev) |
ボリューム割り当て |
ShadowImageペアの情報取得 |
ShadowImageペア操作 |
|
GET操作によるオブジェクトの取得(情報検索で取得する場合) |
HDPボリュームの作成 (BlockStorageAPI.views_undefined_ldev) |
ボリューム割り当て |
GET操作によるActionテンプレートの取得 |
ShadowImageペアの分割 (BlockStorageAPI.split_local_copy _pair_template) |
ShadowImageペア操作 |
GET操作によるジョブの状態取得 |
HTTPリクエストの発行と非同期処理の状態確認のための関数の定義 |
ボリューム割り当て ShadowImageペア操作 リモートストレージシステムの情報登録 |
非同期処理の状態変化取得のための関数の定義 |
TrueCopyペア操作 |
|
PUT操作によるオブジェクトの属性変更 |
ホストモードの変更 |
ボリューム割り当て |
PUT操作によるAction テンプレートを使用したアクションの実行 |
ShadowImageペアの分割(BlockStorageAPI.split_local_copy_pair) |
ShadowImageペア操作 |
PUT操作によるオブジェクトに対するアクションの実行 |
転送先syslogサーバへのテストメッセージ送信 |
ファイルアップロード(監査ログ転送先設定) |
PUT操作によるサービスのアクションの実行 |
リソースのロック リソースのアンロック |
TrueCopyペア操作 |
POST操作によるオブジェクトの新規作成 |
HDPボリュームの作成 (BlockStorageAPI.ldevs) ホストのWWNの登録 (BlockStorageAPI.host_wwns) ホストグループの作成(BlockStorageAPI.host_groups) LUパスの設定(BlockStorageAPI.luns) |
ボリューム割り当て |
ShadowImageペアの作成 (BlockStorageAPI.local_copy_pairs) |
ShadowImageペア操作 |
|
POST操作によるオブジェクトに対するアクションの実行 |
転送先syslogサーバのルート証明書のアップロード 転送先syslogサーバのクライアント証明書のアップロード |
ファイルアップロード(監査ログ転送先設定) |
複数装置でのセッション生成を必要とする操作(リモートコピー操作) |
TrueCopyペアの作成 |
TrueCopyペア操作 |
DELETE 操作によるオブジェクトの削除 |
セッションの破棄 |
ボリューム割り当て ShadowImageペア操作 リモートストレージシステムの情報登録 TrueCopyペア操作 |
取得した情報の出力 |
HDPボリュームの情報取得 |
ボリューム割り当て |
ShadowImage ペアの 情報取得 |
ShadowImageペア操作 |
|
ジョブの実行結果の取得 |
HTTPリクエストの発行と非同期処理の状態確認のための関数の定義(BlockStorageAPI.job) |
ボリューム割り当て ShadowImageペア操作 リモートストレージシステムの情報登録 |
非同期処理の状態変化取得のための関数の定義 |
TrueCopyペア操作 |
|
操作結果が反映されたリソースのURL取得 |
HTTPリクエストの発行と非同期処理の状態確認のための関数の定義 |
ボリューム割り当て ShadowImageペア操作 リモートストレージシステムの情報登録 |
非同期処理の状態変化取得のための関数の定義 |
TrueCopyペア操作 |
|
エラーコードの取得 |
HTTPリクエストの発行と非同期処理の状態確認のための関数の定義 |
ボリューム割り当て ShadowImageペア操作 リモートストレージシステムの情報登録 |
非同期処理の状態変化取得のための関数の定義 |
TrueCopyペア操作 |
|
エラーメッセージの出力 |
エラーメッセージの出力 |
ボリューム割り当て ShadowImageペア操作 リモートストレージシステムの情報登録 TrueCopyペア操作 |
サンプルコードの構造
- URLの生成 (BlockStorageAPIクラス)
ストレージシステムへのHTTPリクエストを発行するためのURLを生成します。
- HTTPリクエストの発行と非同期処理の状態確認(invoke_async_command)
HTTPリクエストを発行し、さらに非同期処理の実行結果が反映されたかどうかを確認して結果を返します。
- 非同期処理の状態変化取得(wait_until_jobstatus_is_changed)
パラメータで指定した状態にジョブが遷移したことを確認して結果を返します。
サンプルコードのファイル
- register_storage.py
ストレージシステムの情報登録のサンプルコードを記載したファイルです。
- provisioning.py
ボリューム割り当てのサンプルコードを記載したファイルです。
- local_copy.py
ShadowImageペア操作のサンプルコードを記載したファイルです。
- register_remote_storage.py
リモートストレージシステムの情報登録のサンプルコードを記載したファイルです。
- synchronous_remote_copy.py
TrueCopyペア操作のサンプルコードを記載したファイルです。
- auditlog_syslog_server_setting.py
ファイルアップロード(監査ログ転送先設定)のサンプルコードを記載したファイルです。
- backup_encryption_keys.py
ファイルダウンロード(暗号化鍵バックアップ)のサンプルコードを記載したファイルです。
- recreate_parity_group.py
パリティグループ再作成(データの暗号化)のサンプルコードを記載したファイルです。
- block_storage_api.py
リクエストラインを生成する関数を、BlockStorageAPIクラスとして定義したファイルです。
- rest_server_param.py
REST APIサーバがインストールされているサーバの情報を定義したファイルです。
- storage_param.py
ローカルストレージシステムの情報を定義したファイルです。
- remote_copy_param.py
リモートストレージシステムとローカルストレージシステムの情報を定義したファイルです。
- Windowsの場合
- <DVD-ROMドライブ>:\ConfManager\samplecode.zip
- Linuxの場合
- <DVD-ROMのマウントディレクトリ>/ConfManager/samplecode.tar
サンプルコードの動作環境
サンプルコードは、スクリプト言語のPythonで作成されています。Pythonは可読性に優れ、Webサービス開発において広く普及している汎用性の高い言語です。Pythonの公式サイト(https://www.python.org/)から Pythonをダウンロードし、動作環境を構築してください。
この章に記載しているサンプルコードでは、標準ライブラリ(json、sys、http.client、time、traceback)を使用します。また、標準ライブラリのほかに、サードパーティライブラリであるRequestsライブラリを使用します。 Requestsライブラリのダウンロードページからダウンロードしてください。
なお、この章に記載しているサンプルコードは、Python3.7.5およびRequests2.13.0の環境で動作確認しています。
- ヒント
-
サンプルコードでは、REST APIクライアントとストレージシステム間のSSL通信で使用するサーバ証明書が自己署名証明書の場合に発生するエラーを回避するため、リクエスト発行時にサーバ証明書の検証処理をスキップするよう指定しています。