def deleteImage(self, paramDict): #処理メソッド取得 method = paramDict['method'] #辞書からメソッドキーと値を削除 del paramDict['method'] #引数チェック result = CommonUtils.checkArguments(method, paramDict) if result != True: return {'result':'1','message':result} #変数定義 platformList = None imageName = paramDict['imageName'] if "platformList" in paramDict: platformList = paramDict['platformList'] iconDeleteFlg = False imageNoList = [] imageDataList = [] #イメージデータ存在チェック try: imageData = CommonUtils.getImageDataByName(imageName) if imageData is None: return {'result':'1','message':"イメージ:"+ imageName + "が存在しません。削除対象を確認して下さい。"} except Exception as e: return {'result':'1','message':"イメージ情報の取得に失敗したため処理を中止します。管理者に連絡を行って下さい。"} #削除対象imageNo一覧取得 #platformListが指定されなかった場合 if platformList is None: for image in imageData: imageNoList.append(image["IMAGE_NO"]) else: platformList = platformList.split(",") for platformName in platformList: try: platformNo = CommonUtils.getPlatformDataByName(platformName)["PLATFORM_NO"] except Exception as e: return {'result':'1','message':"プラットフォーム情報の取得に失敗したため処理を中止します。管理者に連絡を行って下さい。"} try: imageData = CommonUtils.getImageDataByNameAndPlatformNo(imageName, platformNo) if imageData != None: imageNoList.append(imageData["IMAGE_NO"]) except Exception as e: return {'result':'1','message':"イメージ情報の取得に失敗したため処理を中止します。管理者に連絡を行って下さい。"} for imageNo in imageNoList: #削除対象のOSイメージを使用しているインスタンス存在チェック try: table = self.conn.getTable("INSTANCE") except Exception as e: return {'result':'1','message':"INSTANCEテーブルが存在しません。管理者に連絡を行って下さい。"} instanceDatas = self.conn.select(table.select(table.c.IMAGE_NO==imageNo)) if len(instanceDatas) > 0: return {'result':'1','message':"OSイメージNo:" + str(imageNo) + "は現在作成済みのインスタンスで使用されているため削除できません。処理を中止します。"} #削除対象のOSイメージを使用しているmyCloud用インスタンステンプレートチェック try: table = self.conn.getTable("TEMPLATE_INSTANCE") except Exception as e: return {'result':'1','message':"TEMPLATE_INSTANCEテーブルが存在しません。管理者に連絡を行って下さい。"} tmpInstDatas = self.conn.select(table.select(table.c.IMAGE_NO==imageNo)) if len(tmpInstDatas) > 0: return {'result':'1','message':"OSイメージNo:" + str(imageNo) + "は現在インスタンステンプレートで使用されているため削除できません。処理を中止します。"} #imageNameの同名存在チェック try: table = self.conn.getTable("IMAGE") except Exception as e: return {'result':'1','message':"IMAGEテーブルが存在しません。管理者に連絡を行って下さい。"} checkImageData = self.conn.select(table.select(table.c.IMAGE_NAME==imageName)) if len(checkImageData) == len(imageNoList): iconDeleteFlg = True for imageNo in imageNoList: #プラットフォームデータ取得 try: platformNo = CommonUtils.getImageDataByNo(imageNo)["PLATFORM_NO"] except Exception as e: return {'result':'1','message':"イメージ情報の取得に失敗したため処理を終了します。"} try: plData = CommonUtils.getPlatformDataByNo(platformNo) except Exception as e: return {'result':'1','message':"プラットフォーム情報の取得に失敗したため処理を中止します。管理者に連絡を行って下さい。"} iaasName = plData["PLATFORM_TYPE"] #IaaS毎のイメージテーブルのデータ削除 if "aws" == iaasName: try: tableImageAws = self.conn.getTable("IMAGE_AWS") sql = tableImageAws.delete(tableImageAws.c.IMAGE_NO == imageNo) self.conn.execute(sql) except Exception as e: self.conn.rollback() return {'result':'1','message':"IMAGE_AWSテーブルのデータ削除に失敗したため処理を中止します。"} elif "vmware" == iaasName: try: tableImageVm = self.conn.getTable("IMAGE_VMWARE") sql = tableImageVm.delete(tableImageVm.c.IMAGE_NO == imageNo) self.conn.execute(sql) except Exception as e: self.conn.rollback() return {'result':'1','message':"IMAGE_VMWAREテーブルのデータ削除に失敗したため処理を中止します。"} elif "cloudstack" == iaasName: try: tableImageCs = self.conn.getTable("IMAGE_CLOUDSTACK") sql = tableImageCs.delete(tableImageCs.c.IMAGE_NO == imageNo) self.conn.execute(sql) except Exception as e: self.conn.rollback() return {'result':'1','message':"IMAGE_CLOUDSTACKテーブルのデータ削除に失敗したため処理を中止します。"} elif "vcloud" == iaasName: try: tableImageVc = self.conn.getTable("IMAGE_VCLOUD") sql = tableImageVc.delete(tableImageVc.c.IMAGE_NO == imageNo) self.conn.execute(sql) except Exception as e: self.conn.rollback() return {'result':'1','message':"IMAGE_VCLOUDテーブルのデータ削除に失敗したため処理を中止します。"} elif "openstack" == iaasName: try: tableImageOs = self.conn.getTable("IMAGE_OPENSTACK") sql = tableImageOs.delete(tableImageOs.c.IMAGE_NO == imageNo) self.conn.execute(sql) except Exception as e: self.conn.rollback() return {'result':'1','message':"IMAGE_OPENSTACKテーブルのデータ削除に失敗したため処理を中止します。"} elif "azure" == iaasName: try: tableImageAz = self.conn.getTable("IMAGE_AZURE") sql = tableImageAz.delete(tableImageAz.c.IMAGE_NO == imageNo) self.conn.execute(sql) except Exception as e: self.conn.rollback() return {'result':'1','message':"IMAGE_AZUREテーブルのデータ削除に失敗したため処理を中止します。"} elif "nifty" == iaasName: try: tableImageNif = self.conn.getTable("IMAGE_NIFTY") sql = tableImageNif.delete(tableImageNif.c.IMAGE_NO == imageNo) self.conn.execute(sql) except Exception as e: self.conn.rollback() return {'result':'1','message':"IMAGE_NIFTYテーブルのデータ削除に失敗したため処理を中止します。"} #IMAGEテーブルのデータ削除 try: tableImage = self.conn.getTable("IMAGE") sql = tableImage.delete(tableImage.c.IMAGE_NO == imageNo) self.conn.execute(sql) except Exception as e: self.conn.rollback() return {'result':'1','message':"IMAGEテーブルのデータ削除に失敗したため処理を中止します。"} self.conn.commit() imageNos = ",".join(str(imageNo) for imageNo in imageNoList) if iconDeleteFlg: #アイコン画像削除処理 filePath = glob.glob('/opt/adc/app/auto-web/VAADIN/themes/classy/icons/' + imageName + '.*') if len(filePath) > 0: if os.path.isfile(filePath[0]): os.remove(filePath[0]) return {'result':'0','message':"OSイメージNo:" + imageNos + "の削除が完了しました。"}
def addImage(self, paramDict): #処理メソッド取得 method = paramDict['method'] #辞書からメソッドキーと値を削除 del paramDict['method'] iaasNameList = [] retDict = None platformList = None platformNoList = [] imageNoList = [] try: #platformListが指定された場合 if "platformList" in paramDict: #platformListをカンマ区切りで分ける platformList = paramDict['platformList'].split(',') #platformListが指定されなかった場合PLATFORMテーブルからSELECTABLEが1のPLATFORM_NAME一覧取得 else: platformList = CommonUtils.getSelectablePlatformNameList() #AWSプラットフォームが指定された場合、専用のチェックメソッドを指定 for platformName in platformList: iaasName = CommonUtils.getPlatformTypeByName(platformName) if iaasName is None: return {'result':'1','message':"指定されたプラットフォーム名:" + platformName + "は存在しません。登録対象を確認して下さい。"} if "aws" == iaasName: method = "addAwsImage" except Exception as e: return {'result':'1','message':"プラットフォーム情報の取得に失敗したためOSイメージの登録を中止します。管理者に連絡を行って下さい。"} #引数のチェック result = CommonUtils.checkArguments(method, paramDict) if result != True: return {'result':'1','message':result} #引数から変数へセット imageName = paramDict['imageName'] imageNameDisp = paramDict['imageNameDisp'] osName = paramDict['osName'] osNameDisp = paramDict['osNameDisp'] instanceTypeList = paramDict['instanceTypeList'] imageId = paramDict['imageId'] zabbixTemplate = paramDict['zabbixTemplate'] serviceList = None serviceNoList = 0 kernelId = None ramdiskId = None ebsImageFlg = 0 icon = None if "serviceList" in paramDict: serviceList = paramDict['serviceList'] if "kernelId" in paramDict: kernelId = paramDict['kernelId'] if "ramdiskId" in paramDict: ramdiskId = paramDict['ramdiskId'] if "ebsImageFlg" in paramDict: ebsImageFlg = paramDict['ebsImageFlg'] if "icon" in paramDict: icon = paramDict['icon'] #serviceListの値が存在する場合、名称をNoに変換 if serviceList != None: serviceList = serviceList.split(',') serviceNoList = [] for serviceName in serviceList: try: result = CommonUtils.getComponentTypeNoByName(serviceName) if result is None: return {'result':'1','message':"指定されたサービス名称:" + serviceName + "が存在しません。登録対象を確認して下さい。"} else: serviceNoList.append(result) except AttributeError as e: return {'result':'1','message':"サービス名称の取得に失敗したため処理を中止します。管理者に連絡を行って下さい。"} #リストをカンマで結合 serviceNoList = ",".join(serviceNoList) #プラットフォーム存在チェック for platformName in platformList: try: plData = CommonUtils.getPlatformDataByName(platformName) except Exception as e: return {'result':'1','message':"プラットフォーム情報の取得に失敗したため処理を中止します。管理者に連絡を行って下さい。"} platformNoList.append(str(plData["PLATFORM_NO"])) iaasNameList.append(plData["PLATFORM_TYPE"]) #同一プラットフォーム・同一名のイメージデータ存在チェック for platformNo in platformNoList: try: checkImageData = CommonUtils.getImageDataByNameAndPlatformNo(imageName, platformNo) #指定されたプラットフォームに既に同名のイメージが存在する場合 if checkImageData != None: return {'result':'1','message':"指定されたプラットフォーム:" + str(platformNo) +"には既に同じ名称のイメージ:" + imageName + "が存在します。名称を指定し直して下さい。"} except Exception as e: return {'result':'1','message':"イメージ情報の取得に失敗したため処理を中止します。管理者に連絡を行って下さい。"} #アイコンファイル存在チェック if icon != None: if os.path.isfile(icon) == False: return {'result':'1','message':"指定されたアイコンファイルが見つからないため処理を中止します。登録対象を確認して下さい。"} #zabbixTemplateの存在チェックと、存在しない場合の追加処理 #zabbixAPI認証コード発行 try: #getConnectZabbixApi呼び出し auth = CommonUtils.getConnectZabbixApi() except Exception as e: return {'result':'1','message':"zabbixAPI認証コード取得に失敗したため処理を終了します。管理者に連絡を行って下さい。"} if auth == None: return {'result':'1','message':"zabbixAPI認証コードが発行されなかったため処理を終了します。"} #zabbixテンプレート存在チェック try: #getZabbixTemplate呼び出し zabbixTemplateData = CommonUtils.getZabbixTemplate(auth, zabbixTemplate) except Exception as e: return {'result':'1','message':"zabbixテンプレート情報の取得に失敗したため処理を終了します。管理者に連絡を行って下さい。"} #テンプレート情報が未登録の場合登録処理実行 createTemp = True if zabbixTemplateData == False: #createZabbixTemplate呼び出し try: createTemp = CommonUtils.createZabbixTemplate(auth, zabbixTemplate) except Exception as e: return {'result':'1','message':"zabbixテンプレートの追加に失敗したため処理を終了します。管理者に連絡を行って下さい。"} if createTemp != True: return {'result':'1','message':createTemp} cnt = 0 #IMAGEテーブルと各種PLATFORM_TYPE毎のIMAGE系テーブルへのデータ登録 for platformNo in platformNoList: try: #IMAGEテーブル登録処理実行 tableImage = self.conn.getTable("IMAGE") sql = tableImage.insert({"PLATFORM_NO":platformNo, "IMAGE_NAME":imageName, "IMAGE_NAME_DISP":imageNameDisp, "OS":osName, "OS_DISP":osNameDisp, "SELECTABLE":"1", "COMPONENT_TYPE_NOS":serviceNoList, "ZABBIX_TEMPLATE":zabbixTemplate }) #return {'result':'1','message':str(sql)} self.conn.execute(sql) #ここでコミットしないと子テーブルのPLATFROM_NOが取得出来ない self.conn.commit() except Exception as e: self.conn.rollback() return {'result':'1','message':"IMAGEテーブルへの登録に失敗したため処理を中止します。イメージ名:" + imageName} imageData = CommonUtils.getImageDataByNameAndPlatformNo(imageName, platformNo) imageNo = imageData["IMAGE_NO"] imageNoList.append(str(imageNo)) #IaaS毎のテーブル登録 if "aws" == iaasNameList[cnt]: try: #IMAGE_AWSテーブル登録処理実行 tableImageAws = self.conn.getTable("IMAGE_AWS") sql = tableImageAws.insert({"IMAGE_NO":imageNo, "IMAGE_ID":imageId, "KERNEL_ID":kernelId, "RAMDISK_ID":ramdiskId, "INSTANCE_TYPES":instanceTypeList, "EBS_IMAGE":ebsImageFlg }) self.conn.execute(sql) self.conn.commit() except Exception as e: self.conn.rollback() retDict = {'result':'1','message':"IMAGE_AWSテーブルへのデータ登録に失敗したため処理を中止します。"} elif "vmware" == iaasNameList[cnt]: try: #IMAGE_VMWAREテーブル登録処理実行 tableImageVmware = self.conn.getTable("IMAGE_VMWARE") sql = tableImageVmware.insert({"IMAGE_NO":imageNo, "TEMPLATE_NAME":imageId, "INSTANCE_TYPES":instanceTypeList }) self.conn.execute(sql) self.conn.commit() except Exception as e: self.conn.rollback() retDict = {'result':'1','message':"IMAGE_VMWAREテーブルへのデータ登録に失敗したため処理を中止します。"} elif "cloudstack" == iaasNameList[cnt]: try: #IMAGE_CLOUDSTACKテーブル登録処理実行 tableImageCloudstack = self.conn.getTable("IMAGE_CLOUDSTACK") sql = tableImageCloudstack.insert({"IMAGE_NO":imageNo, "TEMPLATE_ID":imageId, "INSTANCE_TYPES":instanceTypeList }) self.conn.execute(sql) self.conn.commit() except Exception as e: self.conn.rollback() retDict = {'result':'1','message':"IMAGE_CLOUDSTACKテーブルへのデータ登録に失敗したため処理を中止します。"} elif "vcloud" == iaasNameList[cnt]: try: #IMAGE_VCLOUDテーブル登録処理実行 tableImageVcloud = self.conn.getTable("IMAGE_VCLOUD") sql = tableImageVcloud.insert({"IMAGE_NO":imageNo, "TEMPLATE_NAME":imageId, "INSTANCE_TYPES":instanceTypeList }) self.conn.execute(sql) self.conn.commit() except Exception as e: self.conn.rollback() retDict = {'result':'1','message':"IMAGE_VCLOUDテーブルへのデータ登録に失敗したため処理を中止します。"} elif "openstack" == iaasNameList[cnt]: try: #IMAGE_OPENSTACKテーブル登録処理実行 tableImageOpenstack = self.conn.getTable("IMAGE_OPENSTACK") sql = tableImageOpenstack.insert({"IMAGE_NO":imageNo, "IMAGE_ID":imageId, "INSTANCE_TYPES":instanceTypeList }) self.conn.execute(sql) self.conn.commit() except Exception as e: self.conn.rollback() retDict = {'result':'1','message':"IMAGE_OPENSTACKテーブルへのデータ登録に失敗したため処理を中止します。"} elif "azure" == iaasNameList[cnt]: try: #IMAGE_AZUREテーブル登録処理実行 tableImageAzure = self.conn.getTable("IMAGE_AZURE") sql = tableImageAzure.insert({"IMAGE_NO":imageNo, "IMAGE_NAME":imageId, "INSTANCE_TYPES":instanceTypeList }) self.conn.execute(sql) self.conn.commit() except Exception as e: self.conn.rollback() retDict = {'result':'1','message':"IMAGE_AZUREテーブルへのデータ登録に失敗したため処理を中止します。"} elif "nifty" == iaasNameList[cnt]: try: #IMAGE_NIFTYテーブル登録処理実行 tableImageNifty = self.conn.getTable("IMAGE_NIFTY") sql = tableImageNifty.insert({"IMAGE_NO":imageNo, "IMAGE_ID":imageId, "INSTANCE_TYPES":instanceTypeList }) self.conn.execute(sql) self.conn.commit() except Exception as e: self.conn.rollback() retDict = {'result':'1','message':"IMAGE_NIFTYテーブルへのデータ登録に失敗したため処理を中止します。"} if retDict != None and retDict['result'] == "1": image = self.conn.getTable("IMAGE") #エラー終了時、登録したイメージデータを削除 image.delete(image.c.IMAGE_NO == imageNo).execute() cnt = cnt + 1 if icon != None: path, ext = os.path.splitext(icon) #iconの指定がある場合iconのパスに存在する画像を/opt/adc/app/auto-web/VAADIN/themes/classy/iconsに(引数.imageName)pngの形式にリネームしてコピーする。 copyName = "/opt/adc/app/auto-web/VAADIN/themes/classy/icons/" + imageName + ext shutil.copyfile(icon, copyName) imageNoList = ",".join(imageNoList) retDict = {'result':'0','message':"OSイメージNo:" + imageNoList + "/" + imageName + "の登録が完了しました。"} return retDict