Example #1
0
    def __init__(self, conn, accessInfo, platforminfo, isLb=False):
        self.conn = conn
        self.accessInfo = accessInfo
        username = accessInfo['OS_ACCESS_ID']
        password = accessInfo['OS_SECRET_KEY']
        self.client = OpenStackIaasClient(platforminfo, username, password)

        #コントローラ作成
        self.instancecontroller = OpenStackInstanceController(
            platforminfo, self.client, self.conn)
        self.volumecontroller = OpenStackVolumeController(
            platforminfo, self.client, self.conn)
        self.othercontroller = OpenStackOtherController(
            platforminfo, self.client, self.conn)
    def __init__(self, conn, accessInfo, platforminfo, isLb = False):
        self.conn = conn
        self.accessInfo = accessInfo
        username = accessInfo['OS_ACCESS_ID']
        password = accessInfo['OS_SECRET_KEY']
        self.client = OpenStackIaasClient(platforminfo, username, password)

        #コントローラ作成
        self.instancecontroller = OpenStackInstanceController(platforminfo, self.client, self.conn)
        self.volumecontroller   = OpenStackVolumeController(platforminfo, self.client, self.conn)
        self.othercontroller    = OpenStackOtherController(platforminfo, self.client, self.conn)
Example #3
0
class OpenStackController(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
        username = accessInfo['OS_ACCESS_ID']
        password = accessInfo['OS_SECRET_KEY']
        self.client = OpenStackIaasClient(platforminfo, username, password)

        #コントローラ作成
        self.instancecontroller = OpenStackInstanceController(
            platforminfo, self.client, self.conn)
        self.volumecontroller = OpenStackVolumeController(
            platforminfo, self.client, self.conn)
        self.othercontroller = OpenStackOtherController(
            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

        # ボリュームに関する処理
        table = self.conn.getTable("OPENSTACK_VOLUME")
        volumes = self.conn.select(
            table.select(table.c.INSTANCE_NO == instanceNo))
        for volume in volumes:
            if isNotEmpty(volume["COMPONENT_NO"]):
                # コンポーネント番号がある場合はスキップ
                continue
            #Volumeスタート
            self.volumecontroller.startVolume(instanceNo, volume["VOLUME_NO"])

        self.conn.commit()
        return True

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

        try:
            # ボリュームに関する処理
            tableOSVOL = self.conn.getTable("OPENSTACK_VOLUME")
            volumes = self.conn.select(
                tableOSVOL.select(tableOSVOL.c.INSTANCE_NO == instanceNo))

            for volume in volumes:
                self.volumecontroller.stopVolume(instanceNo,
                                                 volume["VOLUME_NO"])

        except Exception:
            self.logger.error(traceback.format_exc())

        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, volumeId):
        try:
            self.volumecontroller.deleteVolume(volumeId)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise

        self.conn.commit()
        return True

    def describeSecurityGroups(self, vpcid=None):
        securityGroupList = self.client.describeSecurityGroups()
        rtString = ''
        for securityGroup in securityGroupList:
            if rtString != '':
                rtString = rtString + "##"
            rtString = rtString + securityGroup.name + "#" + securityGroup.id

        return "RESULT:" + rtString

    def describeAvailabilityZones(self):
        zoneList = self.client.describeAvailabilityZones()
        rtString = ''
        for zone in zoneList:
            if rtString != '':
                rtString = rtString + "##"
            #必要な情報のみ返却。IDに相当するパラメータがないためNONEをセット
            rtString = rtString + zone.zoneName + "#NONE"

        return "RESULT:" + rtString

    def describeNetwork(self):
        networkList = self.client.describeNetworks()
        rtString = ''
        for nw in networkList:
            if rtString != '':
                rtString = rtString + "##"
            rtString = rtString + nw.id + "#" + nw.label

        return "RESULT:" + rtString

    def describeFlavors(self, flavorIds):
        flavorIdList = flavorIds.split(',')
        flavorNameList = []
        flvs = self.client.describeFlavors()
        rtString = ''
        for flavorId in flavorIdList:
            for flv in flvs:
                if flv.id != flavorId:
                    continue
                if rtString != '':
                    rtString = rtString + "##"
                rtString = rtString + flv.id + "#" + flv.name
                break
            else:
                pass

        return "RESULT:" + rtString

    def describeKeyPairs(self):
        keypairs = self.client.describeKeyPairs()
        rtString = ''
        for keypair in keypairs:
            if rtString != '':
                rtString = rtString + "##"

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

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

    def importKeyPair(self, keyName, publicKeyMaterial):
        self.client.createKeyPair(keyName, publicKeyMaterial)
        self.conn.commit()
        return "RESULT:" + ''
class OpenStackController(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
        username = accessInfo['OS_ACCESS_ID']
        password = accessInfo['OS_SECRET_KEY']
        self.client = OpenStackIaasClient(platforminfo, username, password)

        #コントローラ作成
        self.instancecontroller = OpenStackInstanceController(platforminfo, self.client, self.conn)
        self.volumecontroller   = OpenStackVolumeController(platforminfo, self.client, self.conn)
        self.othercontroller    = OpenStackOtherController(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

        # ボリュームに関する処理
        table = self.conn.getTable("OPENSTACK_VOLUME")
        volumes = self.conn.select(table.select(table.c.INSTANCE_NO==instanceNo))
        for volume in volumes:
            if isNotEmpty(volume["COMPONENT_NO"]):
                # コンポーネント番号がある場合はスキップ
                continue
            #Volumeスタート
            self.volumecontroller.startVolume(instanceNo, volume["VOLUME_NO"])

        self.conn.commit()
        return True

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

        try :
            # ボリュームに関する処理
            tableOSVOL = self.conn.getTable("OPENSTACK_VOLUME")
            volumes = self.conn.select(tableOSVOL.select(tableOSVOL.c.INSTANCE_NO==instanceNo))

            for volume in volumes:
                self.volumecontroller.stopVolume(instanceNo, volume["VOLUME_NO"])

        except Exception:
            self.logger.error(traceback.format_exc())

        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, volumeId):
        try:
            self.volumecontroller.deleteVolume(volumeId)
        except Exception:
            self.logger.error(traceback.format_exc())
            raise

        self.conn.commit()
        return True

    def describeSecurityGroups(self, vpcid=None):
        securityGroupList = self.client.describeSecurityGroups()
        rtString = ''
        for securityGroup in securityGroupList:
            if rtString != '':
                rtString = rtString + "##"
            rtString = rtString + securityGroup.name + "#" + securityGroup.id

        return "RESULT:" + rtString

    def describeAvailabilityZones(self):
        zoneList = self.client.describeAvailabilityZones()
        rtString = ''
        for zone in zoneList:
            if rtString != '':
                rtString = rtString + "##"
            #必要な情報のみ返却。IDに相当するパラメータがないためNONEをセット
            rtString = rtString + zone.zoneName + "#NONE"

        return "RESULT:" + rtString

    def describeNetwork(self):
        networkList = self.client.describeNetworks()
        rtString = ''
        for nw in networkList:
            if rtString != '':
                rtString = rtString + "##"
            rtString = rtString + nw.id + "#" + nw.label

        return "RESULT:" + rtString

    def describeFlavors(self, flavorIds):
        flavorIdList = flavorIds.split(',')
        flavorNameList = []
        flvs = self.client.describeFlavors()
        rtString = ''
        for flavorId in flavorIdList:
            for flv in flvs:
                if flv.id != flavorId:
                    continue
                if rtString != '':
                    rtString = rtString + "##"
                rtString = rtString + flv.id + "#" + flv.name
                break
            else:
                pass

        return "RESULT:" + rtString

    def describeKeyPairs(self):
        keypairs = self.client.describeKeyPairs()
        rtString = ''
        for keypair in keypairs:
            if rtString != '':
                rtString = rtString + "##"

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

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

    def importKeyPair(self, keyName, publicKeyMaterial):
        self.client.createKeyPair(keyName, publicKeyMaterial)
        self.conn.commit()
        return "RESULT:" + ''