def createTag(self, instanceNo, pccInstance):
        #INSTANCE 取得
        tableINS = self.conn.getTable("INSTANCE")
        instance = self.conn.selectOne(tableINS.select(tableINS.c.INSTANCE_NO==instanceNo))
        #FARM 取得
        tableFARM = self.conn.getTable("FARM")
        farm = self.conn.selectOne(tableFARM.select(tableFARM.c.FARM_NO==instance["FARM_NO"]))
        #AWS_INSTANCE 取得
        tableAWSINS = self.conn.getTable("AWS_INSTANCE")
        awsInstance = self.conn.selectOne(tableAWSINS.select(tableAWSINS.c.INSTANCE_NO==instanceNo))


        # Eucalyptusの場合はタグを付けない
        platform = self.platforminfo["platformName"]
        if (platform == "eucalyptus"):
            return

        # Nameタグを追加する
        tags = []
        tags.append(TagSet(None, None, "Name", pccInstance["FQDN"]))
        tags.append(TagSet(None, None, "UserName", self.client.getUsername()))
        tags.append(TagSet(None, None, "CloudName", farm["DOMAIN_NAME"]))
        tags.append(TagSet(None, None, "ServerName", pccInstance["FQDN"]))

        self.client.createTags(awsInstance["INSTANCE_ID"], tags)

        # EBSイメージでなければ終わり
        image = getImage(pccInstance["IMAGE_NO"])
        if (isEmpty(image["ebsImage"])==False):
            return

        instance2 = self.client.describeInstance(awsInstance["INSTANCE_ID"])
Example #2
0
    def startInstance(self, instanceNo):
        #AWS_INSTANCE 取得
        tableCSINS = self.conn.getTable("CLOUDSTACK_INSTANCE")
        csInstance = self.conn.selectOne(tableCSINS.select(tableCSINS.c.INSTANCE_NO==instanceNo))

        #PCC_INSTANCE 取得
        tableINS = self.conn.getTable("INSTANCE")
        pccInstance = self.conn.selectOne(tableINS.select(tableINS.c.INSTANCE_NO==instanceNo))

        #イメージの取得  再考の余地あり
        image = getImage(pccInstance["IMAGE_NO"])

        #
        if isEmpty(csInstance["INSTANCE_ID"]):
            #インスタンスの作成
            self.run(instanceNo, csInstance, pccInstance, image)

            #winodowsなら
            if (startsWithIgnoreCase(image["os"], "windows")):
                #INSTANCE_ID取得の為、CLOUDSTACK_INSTANCE 再取得
                csInstance = self.conn.selectOne(tableCSINS.select(tableCSINS.c.INSTANCE_NO==instanceNo))
                self.client.getPasswordData(csInstance["INSTANCE_ID"])

        else:
            # インスタンスが停止中でない場合はスキップ
            if (csInstance["STATE"] != "Stopped"):
                return;
            # インスタンスの起動
            self.start(instanceNo, csInstance, pccInstance)
Example #3
0
    def createTag(self, instanceNo, pccInstance):
        #INSTANCE 取得
        tableINS = self.conn.getTable("INSTANCE")
        instance = self.conn.selectOne(
            tableINS.select(tableINS.c.INSTANCE_NO == instanceNo))
        #FARM 取得
        tableFARM = self.conn.getTable("FARM")
        farm = self.conn.selectOne(
            tableFARM.select(tableFARM.c.FARM_NO == instance["FARM_NO"]))
        #AWS_INSTANCE 取得
        tableAWSINS = self.conn.getTable("AWS_INSTANCE")
        awsInstance = self.conn.selectOne(
            tableAWSINS.select(tableAWSINS.c.INSTANCE_NO == instanceNo))

        # Eucalyptusの場合はタグを付けない
        platform = self.platforminfo["platformName"]
        if (platform == "eucalyptus"):
            return

        # Nameタグを追加する
        tags = []
        tags.append(TagSet(None, None, "Name", pccInstance["FQDN"]))
        tags.append(TagSet(None, None, "UserName", self.client.getUsername()))
        tags.append(TagSet(None, None, "CloudName", farm["DOMAIN_NAME"]))
        tags.append(TagSet(None, None, "ServerName", pccInstance["FQDN"]))

        self.client.createTags(awsInstance["INSTANCE_ID"], tags)

        # EBSイメージでなければ終わり
        image = getImage(pccInstance["IMAGE_NO"])
        if (isEmpty(image["ebsImage"]) == False):
            return

        instance2 = self.client.describeInstance(awsInstance["INSTANCE_ID"])
Example #4
0
    def startInstance(self, instanceNo):
        #AWS_INSTANCE 取得
        tableVCINS = self.conn.getTable("VCLOUD_INSTANCE")
        vcInstance = self.conn.selectOne(
            tableVCINS.select(tableVCINS.c.INSTANCE_NO == instanceNo))

        #PCC_INSTANCE 取得
        tableINS = self.conn.getTable("INSTANCE")
        pccInstance = self.conn.selectOne(
            tableINS.select(tableINS.c.INSTANCE_NO == instanceNo))

        #FARM 取得
        tableFarm = self.conn.getTable("FARM")
        farm = self.conn.selectOne(
            tableFarm.select(tableFarm.c.FARM_NO == pccInstance["FARM_NO"]))

        #組織
        vdc = self.client.getUseVdc()
        #マイクラウド
        vApp = self.client.describeMyCloud(vdc, farm["FARM_NAME"])

        #イメージの取得  再考の余地あり
        image = getImage(pccInstance["IMAGE_NO"])

        #既存VM検索
        vm = self.client.describeInstance(vApp, vcInstance["VM_NAME"])

        #VMが既に存在する場合はStart なければClone
        if vm is None:
            #インスタンスの作成
            vm = self.cloneVM(vdc, vApp, image, vcInstance, pccInstance)

            #最新情報を取得
            vcInstance = self.conn.selectOne(
                tableVCINS.select(tableVCINS.c.INSTANCE_NO == instanceNo))

            #インスタンスの起動
            self.start(vdc, vApp, vm, vcInstance, pccInstance)

            #winodowsなら
            #if (startsWithIgnoreCase(image["os"], "windows")):
            #    self.client.getPasswordData(vcInstance["INSTANCE_ID"])

        else:
            # インスタンスが停止中でない場合はスキップ
            if (vcInstance["STATUS"] != VCloudIaasClient.STOPPED):
                return

            # インスタンスの起動
            self.start(vdc, vApp, vm, vcInstance, pccInstance)
    def startInstance(self, instanceNo):
        # AWS_INSTANCE 取得
        tableVCINS = self.conn.getTable("VCLOUD_INSTANCE")
        vcInstance = self.conn.selectOne(tableVCINS.select(tableVCINS.c.INSTANCE_NO == instanceNo))

        # PCC_INSTANCE 取得
        tableINS = self.conn.getTable("INSTANCE")
        pccInstance = self.conn.selectOne(tableINS.select(tableINS.c.INSTANCE_NO == instanceNo))

        # FARM 取得
        tableFarm = self.conn.getTable("FARM")
        farm = self.conn.selectOne(tableFarm.select(tableFarm.c.FARM_NO == pccInstance["FARM_NO"]))

        # 組織
        vdc = self.client.getUseVdc()
        # マイクラウド
        vApp = self.client.describeMyCloud(vdc, farm["FARM_NAME"])

        # イメージの取得  再考の余地あり
        image = getImage(pccInstance["IMAGE_NO"])

        # 既存VM検索
        vm = self.client.describeInstance(vApp, vcInstance["VM_NAME"])

        # VMが既に存在する場合はStart なければClone
        if vm is None:
            # インスタンスの作成
            vm = self.cloneVM(vdc, vApp, image, vcInstance, pccInstance)

            # 最新情報を取得
            vcInstance = self.conn.selectOne(tableVCINS.select(tableVCINS.c.INSTANCE_NO == instanceNo))

            # インスタンスの起動
            self.start(vdc, vApp, vm, vcInstance, pccInstance)

            # winodowsなら
            # if (startsWithIgnoreCase(image["os"], "windows")):
            #    self.client.getPasswordData(vcInstance["INSTANCE_ID"])

        else:
            # インスタンスが停止中でない場合はスキップ
            if vcInstance["STATUS"] != VCloudIaasClient.STOPPED:
                return

            # インスタンスの起動
            self.start(vdc, vApp, vm, vcInstance, pccInstance)
Example #6
0
    def stopInstance(self, instanceNo):
        #AWS_INSTANCE 取得
        tableAWSINS = self.conn.getTable("AWS_INSTANCE")
        awsInstance = self.conn.selectOne(
            tableAWSINS.select(tableAWSINS.c.INSTANCE_NO == instanceNo))

        # インスタンスIDがない場合はスキップ
        if (isEmpty(awsInstance["INSTANCE_ID"])):
            return

        #PCC_INSTANCE 取得
        tableINS = self.conn.getTable("INSTANCE")
        pccInstance = self.conn.selectOne(
            tableINS.select(tableINS.c.INSTANCE_NO == instanceNo))

        #イメージの取得  再考の余地あり
        image = getImage(pccInstance["IMAGE_NO"])

        # インスタンスイメージの場合
        if image["ebsImage"] == "false":
            try:
                # インスタンスの削除
                self.terminate(instanceNo, awsInstance, pccInstance)

                # インスタンスの削除待ち
                self.waitTerminate(instanceNo, pccInstance)

            except Exception, e:
                self.logger.error(traceback.format_exc())
                # 情報が不整合(インスタンス異常終了時など)の場合、警告ログと後始末のみ行う
                self.logger.warn(e.massage)

                updateDict = self.conn.selectOne(
                    tableAWSINS.select(
                        tableAWSINS.c.INSTANCE_NO == instanceNo))
                updateDict["INSTANCE_ID"] = None
                updateDict["STATUS"] = None
                updateDict["DNS_NAME"] = None
                updateDict["PRIVATE_DNS_NAME"] = None
                updateDict["IP_ADDRESS"] = None
                updateDict["PRIVATE_IP_ADDRESS"] = None
                sql = tableAWSINS.update(
                    tableAWSINS.c.INSTANCE_NO == updateDict["INSTANCE_NO"],
                    values=updateDict)
                self.conn.execute(sql)
Example #7
0
    def startInstance(self, instanceNo):
        #AWS_INSTANCE 取得
        tableAWSINS = self.conn.getTable("AWS_INSTANCE")
        awsInstance = self.conn.selectOne(
            tableAWSINS.select(tableAWSINS.c.INSTANCE_NO == instanceNo))

        #PCC_INSTANCE 取得
        tableINS = self.conn.getTable("INSTANCE")
        pccInstance = self.conn.selectOne(
            tableINS.select(tableINS.c.INSTANCE_NO == instanceNo))

        #イメージの取得  再考の余地あり
        image = getImage(pccInstance["IMAGE_NO"])

        # インスタンスイメージの場合や、EBSイメージでインスタンスIDがない場合
        if (image["ebsImage"] == "false"
                or isEmpty(awsInstance["INSTANCE_ID"])):

            #インスタンスIDがある場合はスキップ
            if (isEmpty(awsInstance["INSTANCE_ID"]) == False):
                return

            #インスタンスの作成
            self.run(instanceNo, awsInstance, pccInstance, image)

            #インスタンスの作成待ち
            self.waitRun(instanceNo, pccInstance)

            #インスタンスにタグをつける
            self.createTag(instanceNo, pccInstance)

            #winodowsなら
            if (startsWithIgnoreCase(image["os"], "windows")):
                self.waitGetPasswordData(instanceNo, awsInstance)

        # EBSイメージでインスタンスIDがある場合
        else:
            # インスタンスが停止中でない場合はスキップ
            if (awsInstance["STATUS"] != "stopped"):
                return
            # インスタンスの起動
            self.start(instanceNo, awsInstance, pccInstance)

            # インスタンスの起動待ち
            self.waitStart(instanceNo, pccInstance)
    def startInstance(self, instanceNo):
        #AWS_INSTANCE 取得
        tableAWSINS = self.conn.getTable("AWS_INSTANCE")
        awsInstance = self.conn.selectOne(tableAWSINS.select(tableAWSINS.c.INSTANCE_NO==instanceNo))

        #PCC_INSTANCE 取得
        tableINS = self.conn.getTable("INSTANCE")
        pccInstance = self.conn.selectOne(tableINS.select(tableINS.c.INSTANCE_NO==instanceNo))

        #イメージの取得  再考の余地あり
        image = getImage(pccInstance["IMAGE_NO"])

        # インスタンスイメージの場合や、EBSイメージでインスタンスIDがない場合
        if(image["ebsImage"] == "false" or isEmpty(awsInstance["INSTANCE_ID"])):

            #インスタンスIDがある場合はスキップ
            if (isEmpty(awsInstance["INSTANCE_ID"])==False):
                return;

            #インスタンスの作成
            self.run(instanceNo, awsInstance, pccInstance, image)

            #インスタンスの作成待ち
            self.waitRun(instanceNo, pccInstance)

            #インスタンスにタグをつける
            self.createTag(instanceNo, pccInstance)

            #winodowsなら
            if (startsWithIgnoreCase(image["os"], "windows")):
                self.waitGetPasswordData(instanceNo, awsInstance)

        # EBSイメージでインスタンスIDがある場合
        else:
            # インスタンスが停止中でない場合はスキップ
            if (awsInstance["STATUS"] != "stopped"):
                return;
            # インスタンスの起動
            self.start(instanceNo, awsInstance, pccInstance)

            # インスタンスの起動待ち
            self.waitStart(instanceNo, pccInstance)
    def stopInstance(self, instanceNo):

        try :
            # アドレスに関する処理
            self.addresscontroller.stopAddress(instanceNo)
        except Exception:
            self.logger.error(traceback.format_exc())

        try :
            # インスタンスに関する処理
            self.instancecontroller.stopInstance(instanceNo);
        except Exception:
            self.logger.error(traceback.format_exc())

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

            #PCC_INSTANCE 取得
            tableINS = self.conn.getTable("INSTANCE")
            pccInstance = self.conn.selectOne(tableINS.select(tableINS.c.INSTANCE_NO==instanceNo))

            #イメージの取得  再考の余地あり
            image = getImage(pccInstance["IMAGE_NO"])

            for awsVolume in volumes:
                if (image["ebsImage"]=="true"):
                    self.volumecontroller.stopVolume(instanceNo, awsVolume["VOLUME_NO"])
                else:
                    if (isNotEmpty(awsVolume["VOLUME_ID"]) and isNotEmpty(awsVolume["INSTANCE_ID"])):
                        updateDict = self.conn.selectOne(tableAWSVOL.select(tableAWSVOL.c.VOLUME_NO==awsVolume["VOLUME_NO"]))
                        updateDict["STATUS"] = None
                        updateDict["INSTANCE_ID"] = None
                        sql = tableAWSVOL.update(tableAWSVOL.c.VOLUME_NO ==updateDict["VOLUME_NO"], values=updateDict)
                        self.conn.execute(sql)
        except Exception:
            self.logger.error(traceback.format_exc())

        self.conn.commit()
        return "RESULT:TRUE"
    def stopInstance(self, instanceNo):
        # AWS_INSTANCE 取得
        tableAWSINS = self.conn.getTable("AWS_INSTANCE")
        awsInstance = self.conn.selectOne(tableAWSINS.select(tableAWSINS.c.INSTANCE_NO==instanceNo))

        # インスタンスIDがない場合はスキップ
        if (isEmpty(awsInstance["INSTANCE_ID"])):
            return;

        # PCC_INSTANCE 取得
        tableINS = self.conn.getTable("INSTANCE")
        pccInstance = self.conn.selectOne(tableINS.select(tableINS.c.INSTANCE_NO==instanceNo))

        # イメージの取得  再考の余地あり
        image = getImage(pccInstance["IMAGE_NO"])

        # インスタンスイメージの場合
        if image["ebsImage"]=="false":
            try :
                # インスタンスの削除
                self.terminate(instanceNo, awsInstance, pccInstance)

                # インスタンスの削除待ち
                self.waitTerminate(instanceNo, pccInstance)

            except Exception, e:
                self.logger.error(traceback.format_exc())
                # 情報が不整合(インスタンス異常終了時など)の場合、警告ログと後始末のみ行う
                self.logger.warn(e.massage);

                updateDict = self.conn.selectOne(tableAWSINS.select(tableAWSINS.c.INSTANCE_NO==instanceNo))
                updateDict["INSTANCE_ID"] = None
                updateDict["STATUS"] = None
                updateDict["DNS_NAME"] = None
                updateDict["PRIVATE_DNS_NAME"] = None
                updateDict["IP_ADDRESS"] = None
                updateDict["PRIVATE_IP_ADDRESS"] = None
                sql = tableAWSINS.update(tableAWSINS.c.INSTANCE_NO ==updateDict["INSTANCE_NO"], values=updateDict)
                self.conn.execute(sql)