21.8 ファイルダウンロードのサンプルコード(暗号化鍵バックアップ)
暗号化鍵バックアップのサンプルコードの流れ
ステップ |
サンプルコードの流れ |
コードの構成要素 |
---|---|---|
1 |
必要なライブラリのインポートおよびパラメータの設定 |
― |
2 |
ヘッダの定義 |
リクエストヘッダの指定(既定のHTTPヘッダの場合) |
3 |
REST APIのバージョンの確認 |
GET操作によるREST APIバージョン情報の取得 |
4 |
暗号化鍵バックアップのダウンロード |
リソースのURL取得(単一インスタンスなどの固定のオブジェクトIDを指定する場合) PUT操作によるオブジェクトに対するアクションの実行 |
5 |
エラーメッセージの出力 |
エラーメッセージの出力 |
サンプルコードのパラメータに設定する値
サンプルコードのパラメータに設定している値を次に示します。必要に応じて、システムの環境や要件に合わせた設定に変更してください。
パラメータ |
設定値 |
説明 |
---|---|---|
USER_CREDENTIAL |
("user1","pass1") |
ストレージシステムでの認証に使用する認証情報です。サンプルコードの例は、ユーザIDがuser1、パスワードがpass1の場合の設定例です。このユーザには、セキュリティ管理者(参照・編集)ロールが必要です。 |
BACKUP_PASSWORD |
backuppassword |
暗号化鍵バックアップファイルのパスワードです。 |
ENCRYPTION_KEY_BACKUP_FILE_PATH |
D:\encryption\\ |
暗号化鍵バックアップファイルの格納先のパスです。 |
ENCRYPTION_KEY_BACKUP_FILE_NAME |
backupfile.ekf |
暗号化鍵バックアップファイルのファイル名です。 |
サンプルコードの内容
サンプルコードの内容について説明します。
-
必要なライブラリのインポートおよびパラメータの設定
ボリューム割り当ての処理を開始する前に、必要なライブラリやクラスをインポートします。サンプルコードでは、共通ライブラリのほか、URLを生成する関数を定義したBlockStorageAPIクラスをインポートしています。
# coding:utf-8 """ backup_encryption_keys This program requires API version 1.12.0 or newer. """ import requests import json import sys import http.client import traceback import rest_server_param import storage_param from block_storage_api import BlockStorageAPI
サンプルコード内で使用するパラメータを設定します。
# #################Initialize parameters################# # # Change the following parameters to fit your environment # An user id and password of the target storage USER_CREDENTIAL = ("user1", "pass1") # A backup password BACKUP_PASSWORD = "backuppassword" # A path of encryption key backup file ENCRYPTION_KEY_BACKUP_FILE_PATH = "D:\encryption\\" # A encryption key backup file name ENCRYPTION_KEY_BACKUP_FILE_NAME = "backupfile.ekf" ###########################################################
-
ヘッダの定義
HTTPリクエストヘッダを定義します。REST APIの標準であるJSON形式のほかに、ファイルをダウンロードするAPIで使用するストリーム形式も扱うようヘッダ情報を定義しておきます。
# ###You don't have to change the following parameters### # block_storage_api = BlockStorageAPI( rest_server_param.REST_SERVER_IP_ADDR, rest_server_param.REST_SERVER_PORT, storage_param.STORAGE_MODEL, storage_param.SERIAL_NUMBER) headers = {"content-type": "application/json", "accept": "application/json"} file_download_headers = {"content-type": "application/json", "accept": "application/octet-stream"} REQUIRED_MAJOR_VERSION = 1 REQUIRED_MINOR_VERSION = 12 ###########################################################
-
REST APIのバージョンの確認
REST APIのバージョン情報を取得し、サポートしているバージョンであることを確認します。
- ヒント
-
次の場合は、ストレージシステムのマイクロコードのバージョンが適切であるかどうかも確認してください。
- REST APIサーバとストレージシステム間でSSL通信を利用する場合
- ストレージシステムがVSP E シリーズ、VSP G150、G350、G370、G700、G900、VSP F350、F370、F700、F900の場合
REST APIのバージョンとストレージシステムのマイクロコードのバージョンの対応については、Configuration Managerバージョン対応表を参照してください。
""" Check whether this API version allows the REST Server to execute this program @param api_version api version of this REST Server @param required_major_version the lowest number of the major version that this program requires @param required_minor_version the lowest number of the minor version that this program requires """ def check_api_version(api_version, required_major_version, required_minor_version): version = api_version.split(".") major_version = int(version[0]) minor_version = int(version[1]) if not ((major_version == required_major_version and minor_version >= required_minor_version) or major_version >= required_major_version + 1): sys.exit("This program requires API Version " + str(required_major_version) + "." + str(required_minor_version) + "." + "x or newer.\n") try: # step1 Check the API version # print("Check the API version") url = block_storage_api.api_version() r = requests.get(url, headers=headers, verify=False) if r.status_code != http.client.OK: raise requests.HTTPError(r) check_api_version( r.json()["apiVersion"], REQUIRED_MAJOR_VERSION, REQUIRED_MINOR_VERSION)
-
暗号化鍵バックアップファイルのダウンロード
暗号化鍵バックアップファイルを指定したパスにダウンロードします。
# step2 Get the encryption keys backup # print("Get the encryption keys backup") url = block_storage_api.encryption_key_file_backup() body = { "parameters": { "password": BACKUP_PASSWORD } } r = requests.post(url, headers=file_download_headers, auth=USER_CREDENTIAL, data=json.dumps(body), verify=False) if r.status_code != http.client.OK: raise requests.HTTPError(r) with open(ENCRYPTION_KEY_BACKUP_FILE_PATH + ENCRYPTION_KEY_BACKUP_FILE_NAME, 'wb') as saveFile: saveFile.write(r.content)
-
エラーメッセージの出力
サンプルコードでは、通信エラー、HTTP リクエストエラー、ジョブ実行時エラーの処理を記載しています。通信エラーの場合は、エラーメッセージを出力します。HTTP リクエストエラーの場合は、エラーコードとメッセージ、レスポンスボディを出力します。ジョブ実行時エラーの場合は、ジョブの実行結果に含まれる内容をすべて出力します。
except requests.ConnectionError: sys.stderr.write("Connection Error!\n") sys.stderr.write(traceback.format_exc()) except requests.HTTPError as he: sys.stderr.write("HTTP Error! status code : ") sys.stderr.write(str(he.args[0].status_code) + "\n") sys.stderr.write(he.args[0].text + "\n") except Exception as e: sys.stderr.write(traceback.format_exc()) for msg in e.args: sys.stderr.write(str(msg) + "\n") finally: print("Operation was completed.") sys.exit()