Cloneの作成

Cloneを作成するスクリプトを記載します。このスクリプトは、QuickOPCを使用した定期的なフルバックアップを作成する運用で、環境構築時に使用します。詳細は、QuickOPCを使用した定期的なフルバックアップの作成を参照してください。

スクリプトの処理の流れは以下です。

  1. POST /volume/{volume_id}/clone APIを使用してCloneを作成する。

quickopc_create.py


import sys

from eternus_rest import EtdxBaseApi

# Change the following values for your environment.
storage_url = "https://192.168.0.1:5665"
storage_user_name = "username"
storage_password = "password"

# Change the following values as required.
# Volume ID to create clone.
volume_id = 100001
# TPP ID to create a clone.
tpp_id = 0
# Name of the clone.
clone_name = "clone#0"


class EtdxApi(EtdxBaseApi):
    def __init__(self, base_url, boxid=None, proxies=None):
        super().__init__(base_url, boxid=boxid, proxies=proxies)

    def quickopc_create(self, volume_id, tpp_id, clone_name):
        """Create clone using QuickOPC

        Create clone volume and QuickOPC session.

        Args:
            volume_id (int): Volume ID to create clone.
            tpp_id (int): TPP ID to create the clone.
            clone_name (str): Name of the clone.

        Returns:
            int: Clone volume ID. If failed, returns a value of -1.
              This value cannot be used as volume ID.
        """
        body = {
            "name": clone_name,
            "tpp_id": tpp_id,
            "is_data_tracking_disabled": False
        }
        r = super().post("/api/v1/volume/{0!s}/clone".format(volume_id), body)
        if r.status_code != 202:
            print("Failed to request a clone creation.")
            print(r)
            print(r.json())
            return -1

        # Wait for the job completion
        job_r = super().wait_job(r.json()["job_id"])
        if job_r.json()["status"] != "Success":
            print("Failed to create a clone.")
            print(job_r)
            print(job_r.json())
            return -1
        backup_volume_href = job_r.json()["resource_href_list"][0]
        backup_volume_id = int(backup_volume_href.split("/")[4])

        return backup_volume_id


def main():
    storage = EtdxApi(storage_url)

    # Login
    if not storage.login(storage_user_name, storage_password):
        return False

    print("Creating a clone of the volume (ID: {0!s}) using QuickOPC."
          .format(volume_id))

    # Create clone using QuickOPC
    clone_volume_id = storage.quickopc_create(volume_id, tpp_id, clone_name)
    if clone_volume_id == -1:
        return False
    print("Created clone volume ID:", clone_volume_id)

    # Get the clone information
    r = storage.get("/api/v1/volume/{0!s}/copysession".format(clone_volume_id))
    print(r.json())

    # Variable declaration for other QuickOPC script
    print()
    print("--- Variable declaration for other QuickOPC script ---")
    print("clone_pair_list = [({0!s}, {1!s})]"
          .format(volume_id, clone_volume_id))

    # Logout
    storage.logout()
    return True


if __name__ == '__main__':
    if not main():
        sys.exit(1)