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"])
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)
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"])
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)
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)
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)