예제 #1
0
    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 + "の削除が完了しました。"}
예제 #2
0
    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