def __init__(self, conn, accessInfo, platforminfo, isLb=False):
        self.conn = conn
        self.accessInfo = accessInfo
        self.client = AzureIaasClient(platforminfo, accessInfo["USER_NAME"],
                                      accessInfo["SUBSCRIPTION_ID"],
                                      accessInfo["CERTIFICATE"], self.conn)

        #コントローラ作成
        self.instancecontroller = azureInstanceController(
            platforminfo, self.client, self.conn)
        self.volumecontroller = azureVolumeController(platforminfo,
                                                      self.client, self.conn)
        self.othercontroller = azureOtherController(platforminfo, self.client,
                                                    self.conn)
    def __init__(self, conn, accessInfo, platforminfo, isLb = False):
        self.conn = conn
        self.accessInfo = accessInfo
        self.client = AzureIaasClient(platforminfo, accessInfo["USER_NAME"], accessInfo["SUBSCRIPTION_ID"], accessInfo["CERTIFICATE"], self.conn)

        #コントローラ作成
        self.instancecontroller = azureInstanceController(platforminfo, self.client, self.conn)
        self.volumecontroller   = azureVolumeController(platforminfo, self.client, self.conn)
        self.othercontroller    = azureOtherController(platforminfo, self.client, self.conn)
class AzureController(IaasController):

    logger = IaasLogger()

    conn = None
    accessInfo = None

    client = None
    instancecontroller = None
    volumecontroller = None
    othercontroller = None

    def __init__(self, conn, accessInfo, platforminfo, isLb = False):
        self.conn = conn
        self.accessInfo = accessInfo
        self.client = AzureIaasClient(platforminfo, accessInfo["USER_NAME"], accessInfo["SUBSCRIPTION_ID"], accessInfo["CERTIFICATE"], self.conn)

        #コントローラ作成
        self.instancecontroller = azureInstanceController(platforminfo, self.client, self.conn)
        self.volumecontroller   = azureVolumeController(platforminfo, self.client, self.conn)
        self.othercontroller    = azureOtherController(platforminfo, self.client, self.conn)

    def __del__(self):
        self.conn.rollback()
        self.conn.close()

    def startInstance(self, instanceNo):
        try:
            self.instancecontroller.startInstance(instanceNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise

        self.conn.commit()
        return True

    def stopInstance(self, instanceNo):
        try:
            self.instancecontroller.stopInstance(instanceNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise

        self.conn.commit()
        return True

    def terminateInstance(self, instanceNo):
        try:
            self.instancecontroller.terminateInstance(instanceNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise

        self.conn.commit()
        return True

    def startVolume(self, instanceNo, volumeNo):
        try:
            self.volumecontroller.startVolume(instanceNo, volumeNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise

        self.conn.commit()
        return True

    def stopVolume(self, instanceNo, volumeNo):
        try:
            self.volumecontroller.stopVolume(instanceNo, volumeNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise

        self.conn.commit()
        return True

    def deleteVolume(self, volumeNo):
        try:
            self.volumecontroller.deleteVolume(volumeNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise
        return True


    # ユーティリティ
    def generateEnvironment(self, platformNo):
        try:
            self.othercontroller.createCloudServiceFor(platformNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise
        try:
            self.othercontroller.createStorageAccountFor(platformNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise

        self.conn.commit()
        return True

    def describeAzureSubnets(self, networkName):
        networks = self.client.listVirtualNetworkSites()
        rtString = ''
        for network in networks:
            if network.name != networkName:
                continue

            for subnet in network.subnets:
                if rtString != '':
                    rtString = rtString + "##"

                #とりあえず必要な情報のみ返します
                rtString = rtString + subnet.name + '#' + subnet.address_prefix

        self.conn.commit()
        return "RESULT:" + rtString
class AzureController(IaasController):

    logger = IaasLogger()

    conn = None
    accessInfo = None

    client = None
    instancecontroller = None
    volumecontroller = None
    othercontroller = None

    def __init__(self, conn, accessInfo, platforminfo, isLb=False):
        self.conn = conn
        self.accessInfo = accessInfo
        self.client = AzureIaasClient(platforminfo, accessInfo["USER_NAME"],
                                      accessInfo["SUBSCRIPTION_ID"],
                                      accessInfo["CERTIFICATE"], self.conn)

        #コントローラ作成
        self.instancecontroller = azureInstanceController(
            platforminfo, self.client, self.conn)
        self.volumecontroller = azureVolumeController(platforminfo,
                                                      self.client, self.conn)
        self.othercontroller = azureOtherController(platforminfo, self.client,
                                                    self.conn)

    def __del__(self):
        self.conn.rollback()
        self.conn.close()

    def startInstance(self, instanceNo):
        try:
            self.instancecontroller.startInstance(instanceNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise

        self.conn.commit()
        return True

    def stopInstance(self, instanceNo):
        try:
            self.instancecontroller.stopInstance(instanceNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise

        self.conn.commit()
        return True

    def terminateInstance(self, instanceNo):
        try:
            self.instancecontroller.terminateInstance(instanceNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise

        self.conn.commit()
        return True

    def startVolume(self, instanceNo, volumeNo):
        try:
            self.volumecontroller.startVolume(instanceNo, volumeNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise

        self.conn.commit()
        return True

    def stopVolume(self, instanceNo, volumeNo):
        try:
            self.volumecontroller.stopVolume(instanceNo, volumeNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise

        self.conn.commit()
        return True

    def deleteVolume(self, volumeNo):
        try:
            self.volumecontroller.deleteVolume(volumeNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise
        return True

    # ユーティリティ
    def generateEnvironment(self, platformNo):
        try:
            self.othercontroller.createCloudServiceFor(platformNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise
        try:
            self.othercontroller.createStorageAccountFor(platformNo)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise

        self.conn.commit()
        return True

    def describeAzureSubnets(self, networkName):
        networks = self.client.listVirtualNetworkSites()
        rtString = ''
        for network in networks:
            if network.name != networkName:
                continue

            for subnet in network.subnets:
                if rtString != '':
                    rtString = rtString + "##"

                #とりあえず必要な情報のみ返します
                rtString = rtString + subnet.name + '#' + subnet.address_prefix

        self.conn.commit()
        return "RESULT:" + rtString